草庐IT

binary-serialization

全部标签

docker - host to add/usr/bin/host to scratch 由 Go binary 组成的 Dockerfile?

我希望这个非常简单的Go包使用Scratch(或最小)图像在Docker容器中运行。packagemainimport("fmt""os/exec")funcmain(){cmd:="host"args:=[]string{"-t","ns","google.com"}output,err:=exec.Command(cmd,args...).Output()iferr!=nil{fmt.Println(err)}fmt.Println(string(output))}我原来的Dockerfile如下:FROMscratchADDgohost/CMD["/gohost"]这导致exit

parsing - binary.Read() 未在结构中产生预期值

我正在尝试制作一个MOBI文件解析器,但在尝试使用binary.Read()将某些二进制文件解析为结构时遇到了一些问题。我认为这是一个对齐问题,但我不知道为什么我没有得到预期值。我已经通过libmobi运行.mobi文件来测试我的代码输出,并检查了.mobi的二进制文件以验证我没有疯并且libmobi代码没有做一些奇怪的事情(它是不是)。这是一个精简的例子:packagemainimport("bytes""encoding/binary""fmt")typeHeaderstruct{Type[4]byteCreator[4]byteUiduint32Nextuint32RecordC

serialization - 在 Golang 中序列化模型

我试图将我的代码分成模型和序列化器,并希望定义序列化器来处理所有json职责,即关注点分离。我还希望能够调用模型对象obj.Serialize()来获取我随后可以编码的序列化程序结构obj。因此,我想出了以下设计。为了避免循环导入,我不得不在我的序列化器中使用接口(interface),这导致在我的模型中使用getter。我读到getters/setters不是惯用的go代码,我不希望在我的模型中使用“样板”getter代码。对于我想要完成的事情,是否有更好的解决方案,请记住我想要分离关注点和obj.Serialize()?src/models/a.goserializers/a.go

go - 这个 binary.read 如何知道何时停止?

请注意这是伪代码,我正在总结。我正在从函数内部读取一些源代码:maxKeyLen:=100*1024*1024maxValueLen:=100*1024*1024varklen,vlenuint32binary.Read(p.buffer,binary.BigEndian,&klen)ifklen>maxKeyLen{returnnil,nil,fmt.Errorf("keyexceedsmaxlen%d,got%dbytes",maxKeyLen,klen)}binary.Read在什么时候停止?因为在这之后还有另一个读物:key:=make([]byte,klen)_,err:=p

serialization - 戈朗 : print struct as it would appear in source code

类似于thisquestion但不完全相同。我正在做一些代码生成,从Go中生成.go文件。我有一个结构,我想生成它的文本表示,以便我可以将它作为文字插入到生成的代码中。所以,如果我有myVal:=SomeStruct{foo:1,bar:2},我想得到字符串"SomeStruct{foo:1,bar:2}"。这在Go中可能吗? 最佳答案 来自fmt包:%#vaGo-syntaxrepresentationofthevalue在从输出中删除包标识符(本例中的main.)后,这与内置格式尽可能接近。typeTstruct{Astring

c - 为什么 binary.Read() 不能正确读取整数?

我正在尝试用Go读取一个二进制文件。基本上我有一个这样的结构:typefoostruct{Aint16Bint32C[32]byte//andsoon...}我正在从文件中读入这样的结构:fi,err:=os.Open(fname)//errorchecking,deferclose,etc.varbarfoobinary.Read(fi,binary.LittleEndian,&bar)现在,应该可以工作了,但是我得到了一些奇怪的结果。例如,当我读入结构时,我应该得到这个:A:7B:8105C://somestring但我得到的是:A:7B:531169280C://somecorr

debugging - 无法调试二进制文件 - "could not launch process: could not find .debug_line section in binary"

我正在使用GoLandIDE,我有以下简单代码:packagemainimport("fmt""time")funcmain(){start:=time.Now()time.Sleep(2*time.Second)elapsed:=time.Since(start)fmt.Println("elapsed:%s",elapsed)}当我运行它时,它工作正常并且我看到了输出。当我在其中一行中放置断点时,我收到以下错误:GOROOT=/usr/local/go#gosetupGOPATH=/root/go#gosetup/usr/local/go/bin/gobuild-o/tmp/___

GOPL : Binary assignment operator "saves us from re-evaluation?"

Go编程语言(GOPL)的第36页包含以下内容:Eachofthearithmeticandbitwisebinaryoperatorshasacorrespondingassignmentoperatorallowing,forexample,thelaststatementtoberewrittenascount[x]*=scalewhichsavesusfromhavingtorepeat(andre-evaluate)theexpressionforthevariable.我不明白关于重新评估的部分。作者的意思是这样吗count[x]=count[x]*scale和count[

go - 为什么 binary.Size() 返回 (-1)?

代码片段是这样的:packagemainimport("fmt""encoding/binary""reflect")const(commandLen=1bufLenint=4)funcmain(){fmt.Printf("%v%v\n",reflect.TypeOf(commandLen),reflect.TypeOf(bufLen))fmt.Printf("%d%d",binary.Size(commandLen),binary.Size(bufLen))}输出是:intint-1-1我认为由于commandLen和bufLen的类型是int,并且来自“Programminging

string - 戈朗 : bitwise operation on very long binary bit string representation

作为练习,在输入中我得到了2个非常大的string,其中包含长二进制表示,这里是短字符串,但可能超过100位:例子1110000011按位或输出(作为字符串)11111我的方法是解析每个字符串字符并进行按位OR并构建一个新字符串,但是处理大条目时它太长而且效果不佳。然后ParseInt方法被限制为64位长度num1,err:=strconv.ParseInt("11100",2,64)num2,err:=strconv.ParseInt("00011",2,64)res:=num1|num2如何处理2个字符串二进制表示之间的按位或? 最佳答案