我不确定正确的条款,但我该如何使用它:
type MyType map[string]string
作为“数据载体”(或OOP中的对象)?
这不起作用:
func NewMyType() *MyType {
return make(MyType)
}
我确实想使用指针,但显然这不起作用,编译器希望在返回时引用。
答案 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{}
}
虽然"建设者"对于这样的简单类型(简单创建)是不必要的,除非你想在返回它之前做其他事情(例如,指定它的初始容量或用初始值填充它)。