我正在尝试将值分配给在 init 函数中初始化的映射。
但是 panic 发生了: 分配给 nil 映射中的条目
package main
type Object interface {
}
type ObjectImpl struct {
}
type Test struct{
collection map[uint64] Object
}
func (test Test) init(){
test.collection = make(map[uint64] Object)
}
func main() {
test := &Test{}
test.init()
test.collection[1]=&ObjectImpl{}
}
最佳答案
该函数将 Test
作为值,因此它获得了它自己的副本。当函数返回时,对 test Test
的所有更改都将消失。改为通过指针进行 Test
:
func (test *Test) init(){
test.collection = make(map[uint64] Object)
}
请注意,结构 Test
已导出,方法 init
未导出,因此您的库的用户可能会创建一个 Test
但没有正确初始化它。似乎 go 社区已经建立了一个独立的 NewType
方法的约定:
type test struct{
collection map[uint64] Object
}
function NewTest() *test {
return &test{
collection: make(map[uint64] Object),
}
}
这确保用户只能通过调用 NewTest
获得一个 test
并且它将按预期进行初始化。
关于dictionary - 分配给 nil 映射中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064239/