我是 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)
}
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消