为了账号安全,请及时绑定邮箱和手机立即绑定

为什么binary.Read()不适用于结构?

为什么binary.Read()不适用于结构?

Go
慕妹3146593 2023-07-26 17:38:25
我是 golang 的初学者我的golang版本是1.13我尝试使用binary如下包package mainimport (    "bytes"    "encoding/binary"    "fmt")type Coordinate struct {    x float64    y float64    z float64}func (self Coordinate) String() string {    return fmt.Sprintf("(%f,%f,%f)", self.x, self.y, self.z)}//not workfunc test() {    var point Coordinate = Coordinate{1, 2, 3}    buf := bytes.Buffer{}    binary.Write(&buf, binary.LittleEndian, &point)    fmt.Println(point)    fmt.Println(buf)    p := new(Coordinate)    //panic: reflect: reflect.flag.mustBeAssignable using value obtained using unexported field    binary.Read(&buf, binary.LittleEndian, p)    fmt.Println(p)}func main() {    test()    println("over")}我收到这样的错误消息:panic: reflect: reflect.flag.mustBeAssignable using value obtained using unexported field我的代码有什么问题吗?
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

该错误说明了一切:您不能使用未导出的字段。Coordinate更改要导出的字段:


type Coordinate struct {

    X float64

    Y float64

    Z float64

}

然后它就会工作并输出(在Go Playground上尝试):


(1.000000,2.000000,3.000000)

{[0 0 0 0 0 0 240 63 0 0 0 0 0 0 0 64 0 0 0 0 0 0 8 64] 0 0}

(1.000000,2.000000,3.000000)

over

也不要遗漏 Go 中的错误。binary.Read()binary.Write()返回错误,请始终检查它们,例如:


if err := binary.Write(&buf, binary.LittleEndian, &point); err != nil {

    // Handle error, for brevity we just panic here:

    panic(err)

}


if err := binary.Read(&buf, binary.LittleEndian, p); err != nil {

    // Handle error, for brevity we just panic here:

    panic(err)

}


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信