如何在Go中使用map作为数据载体?

时间:2018-05-15 10:55:11

标签: pointers dictionary go types constructor

我不确定正确的条款,但我该如何使用它:

type MyType map[string]string

作为“数据载体”(或OOP中的对象)?

这不起作用:

func NewMyType() *MyType {
    return make(MyType)
}

我确实想使用指针,但显然这不起作用,编译器希望在返回时引用。

1 个答案:

答案 0 :(得分:5)

内置make()函数创建MyType映射类型的非指针值,但返回类型是指针。如果您尝试编译它,那么错误消息会告诉您:

  

不能在返回参数

中使用make(MyType)(类型MyType)作为类型* MyType

如果返回指向该值的指针,则可以:

type MyType map[string]string

func NewMyType() *MyType {
    m := make(MyType)
    return &m
}

如果您想使用一行,可以使用composite literal

func NewMyType() *MyType {
    return &MyType{}
}

但是地图(地图值)已经在后台实现为指针,因此这是多余的,不必要的。只需按原样返回map-value:

type MyType map[string]string

func NewMyType() MyType {
    return make(MyType)
}

或使用复合文字:

func NewMyType() MyType {
    return MyType{}
}

虽然"建设者"对于这样的简单类型(简单创建)是不必要的,除非你想在返回它之前做其他事情(例如,指定它的初始容量或用初始值填充它)。