【问题标题】:Insert into a map as a field of map in golang在golang中作为地图字段插入地图
【发布时间】:2017-11-06 22:17:51
【问题描述】:

我正在尝试创建一个结构,其中一个字段是地图。但是,我不能用一种方法初始化它,然后用另一种方法插入一个值。报错

恐慌:分配给 nil 映射中的条目

来自 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()
}

【问题讨论】:

    标签: go


    【解决方案1】:

    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?

    【讨论】:

    • 感谢您的解决方案并为我指出正确的文献!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多