什么是错误“二进制。写:无效类型“是什么意思?

下面显示的代码,我创建了一个结构类型,并希望将其编码为二进制。但它显示错误,我读过一些类似的代码,但我找不到为什么我的代码不起作用?binary.Write: invalid type main.Stu



type Stu struct {

    Name string

    Age int

    Id int

}


func main()  {

    s := &Stu{

        Name: "Leo",

        Age: 21,

        Id: 1,

    }


    buf := new(bytes.Buffer)

    err := binary.Write(buf, binary.BigEndian, s)

    if err != nil{

        fmt.Println(err)

    }

    fmt.Printf("%q\n", buf)

}


慕码人8056858
浏览 226回答 1
1回答

慕森卡

简而言之:编码/二进制不能用于编码具有非固定大小的任意值。 就是这样的例子。引用自二进制。写():intstringWrite 将数据的二进制表示形式写入 w。数据必须是固定大小的值或固定大小的值的切片,或者是指向此类数据的指针。请注意,如果删除该字段并将字段更改为 ,它将起作用:stringintint32type Stu struct {    Age int32    Id  int32}func main() {    s := &Stu{        Age: 21,        Id:  1,    }    buf := new(bytes.Buffer)    err := binary.Write(buf, binary.BigEndian, s)    if err != nil {        fmt.Println(err)    }    fmt.Printf("%q\n", buf)}哪些输出(在Go Playground上尝试):"\x00\x00\x00\x15\x00\x00\x00\x01"如文档所示,要对复杂结构进行编码,请使用编码/gob。使用以下内容进行编码和解码的示例:encoding/gobbuf := new(bytes.Buffer)enc := gob.NewEncoder(buf)if err := enc.Encode(s); err != nil {    fmt.Println(err)}fmt.Printf("%v\n", buf.Bytes())dec := gob.NewDecoder(buf)var s2 *Stuif err := dec.Decode(&s2); err != nil {    fmt.Println(err)}fmt.Printf("%+v\n", s2)哪些输出(在Go Playground上尝试):[41 255 129 3 1 1 3 83 116 117 1 255 130 0 1 3 1 4 78 97 109 101 1 12 0 1 3 65 103 101 1 4 0 1 2 73 100 1 4 0 0 0 12 255 130 1 3 76 101 111 1 42 1 2 0]&{Name:Leo Age:21 Id:1}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go