Встроенная функция make()
создает значение без указателя для типа вашей карты MyType
, но возвращаемый тип - указатель.Это сообщение об ошибке сообщает, если вы пытаетесь его скомпилировать:
не может использовать make (MyType) (тип MyType) в качестве типа * MyType в возвращаемом аргументе
Если вывозвращает указатель на значение, оно работает:
type MyType map[string]string
func NewMyType() *MyType {
m := make(MyType)
return &m
}
Если вы хотите использовать для него одну строку, вы можете использовать составной литерал :
func NewMyType() *MyType {
return &MyType{}
}
Но карты (значения карт) уже реализованы в виде указателей на фоне, так что это избыточно и не нужно.Просто верните значение карты как есть:
type MyType map[string]string
func NewMyType() MyType {
return make(MyType)
}
Или с составным литералом:
func NewMyType() MyType {
return MyType{}
}
Хотя «конструкторы» для таких простых типов (простое создание) не нужны,если вы не хотите делать другие вещи, прежде чем вернуть его (например, указать его начальную емкость или заполнить его начальными значениями).