gpt4 book ai didi

go - 如何在结构中使用带有私有(private)变量的go-amino库

转载 作者:IT王子 更新时间:2023-10-29 02:37:17 25 4
gpt4 key购买 nike

当结构中有私有(private)变量时,我想使用 amino marshal。

在test2包中,test.go:

type Lnt struct {
Neg bool
abs string // this variable
}

func NewLnt() Lnt {
return Lnt{
Neg: true,
abs: "abcdefef",
}
}

测试 go 文件:

func TestAbc(t *testing.T) {
s := test2.NewLnt()
t.Log("s=", s)

cdc := amino.NewCodec()

b, err := cdc.MarshalBinary(s)
assert.Nil(t, err)
t.Log("b=",b)

var s2 test2.Lnt
err = cdc.UnmarshalBinary(b, &s2)
assert.Nil(t, err)
assert.Equal(t, s, s2)

t.Log("s2=", s2)
}

结果:

encoding_test.go:39: s= {true abcdefef}
encoding_test.go:55:
Error Trace: encoding_test.go:55
Error: Not equal:
expected: test2.Lnt{Neg:true, abs:"abcdefef"}
actual : test2.Lnt{Neg:true, abs:""} // error

Diff:
--- Expected
+++ Actual
@@ -2,3 +2,3 @@
Neg: (bool) true,
- abs: (string) (len=8) "abcdefef"
+ abs: (string) ""
}
Test: TestAbc
encoding_test.go:57: s2= {true }

私有(private)变量“abs”丢失..

是否不受支持,或者在这种情况下是否有其他使用方法?

最佳答案

简短的回答是你不能。

这里发生的事情是您将所有导出的值编码为二进制格式,但不包括未导出的值,因为编码器无权访问它们。

二进制数据被解码到一个新的结构中,因为未导出的字段不在二进制数据中,所以该结构不可能用该值初始化。 (另外,它不能设置值,因为它未导出)。

如果您希望此测试通过,或者接受该数据在编码过程中丢失,您将需要导出结构字段(公开)。

关于go - 如何在结构中使用带有私有(private)变量的go-amino库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51416962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com