2017-06-06 75 views
1

我想创建一个结构,其中一个字段是地图。但是,我不能用方法初始化它,然后用另一种方法插入一个值。它报告错误作为golang中的地图字段插入地图

恐慌:分配进入未缴地图

从一个Python背景的,我什么我错过了困惑。

这里是目标操场snippet

package main 

type profile map[string]float64 

type foobar struct { 
    foo profile 
    bar map[string]profile 
} 

func (fb foobar) Init() { 
    fb.foo = make(profile) 
    fb.bar = make(map[string]profile) 
} 

func (fb foobar) Set() { 
    fb.bar["foo1"] = make(profile) 
} 

func main() { 
    test := foobar{} 
    test.Init() 
    test.Set() 
} 

回答

4

Init方法接收机(fb foobar)是一个值。它应该是一个指针(fb *foobar)。例如,

package main 

type profile map[string]float64 

type foobar struct { 
    foo profile 
    bar map[string]profile 
} 

func (fb *foobar) Init() { 
    fb.foo = make(profile) 
    fb.bar = make(map[string]profile) 
} 

func (fb foobar) Set() { 
    fb.bar["foo1"] = make(profile) 
} 

func main() { 
    test := foobar{} 
    test.Init() 
    test.Set() 
} 

参考:

Should I define methods on values or pointers?

+0

谢谢你的解决方案,并指着我正确的文学! – Junchen