2016-04-28 3 views
1

Итак, в этом ответе here указано, что нельзя встраивать карту в структуру в go. Тем не менее, я возился с ним, и придумал это, и он действительно работает, и довольно прямолинейный.Внедрение карты в структуру на языке go

package main 

import (
    "fmt" 
    "runtime" 
) 

type record struct { 
    m map[string]int 
} 




func main() { 
    practice := record{m:make(map[string]int)} 
    practice.m["foo"] = 2 
    fmt.Println(practice.m) 
    runtime.GC() 
} 

это печатает map[foo:2]

Однако, мой вопрос заключается в том, что есть какие-либо отрицательные стороны к использованию этой реализации карт в структурах, или есть ли более эффективные способы сделать это?

ответ

3
  1. Вы можете сделать это, это абсолютно нормально.

  2. Это не «вложение». Вложение означает something specific - включая безымянное поле именованного типа в структуре. Ваша карта не встроена, это обычный член с именем «m».

  3. Ответ, который вы связали, немного вводит в заблуждение: ответ на вопрос («могу ли я сгладить этот вывод JSON без метода MarshalJSON») действительно нет, но на самом деле это не так, что вложение карты в структуру запрещено. Если вы создадите именованный тип, который является типом карты, вы можете вставить его в структуру просто отлично. Он просто не выводит в JSON то, как человек, задающий этот вопрос, понравился бы.
0

Нет никаких неотъемлемых обратных сторон. Вложение карт в структуры является обычной практикой. Единственные проблемы с реализацией будут за пределами этого, как использование карты в пользу среза, когда срез лучше. Однако это не имеет значения. Выбор типа используемой коллекции (slice vs array vs map say) - это другое обсуждение и больше основан на ваших шаблонах доступа к данным. В общем, это нормально и идиоматично составлять структуры с любыми типами коллекции Go (одна из них - карта).

РЕДАКТИРОВАТЬ: заметили из hobbs ответ на неправильное использование термина, включенного в вопрос и мой ответ, поскольку он указывает, что карта не является «встроенной», которая является специфической особенностью языка, это на самом деле просто композиция, а я должен был бы назвать это выше.

Смежные вопросы