Как использовать карту в качестве носителя данных в Go? - PullRequest
0 голосов
/ 15 мая 2018

Я не уверен насчет правильных терминов, но как мне это использовать:

type MyType map[string]string

как «носитель данных» (или объект в ООП)?

Это не работает:

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

Я хочу использовать указатель, но, видимо, это не работает, компилятор ожидает ссылку при возврате.

1 Ответ

0 голосов
/ 15 мая 2018

Встроенная функция 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{}
}

Хотя «конструкторы» для таких простых типов (простое создание) не нужны,если вы не хотите делать другие вещи, прежде чем вернуть его (например, указать его начальную емкость или заполнить его начальными значениями).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...