2017-06-06 14 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