2016-04-28 8 views
1

So in dieser Antwort here, es wird gesagt, dass man eine Karte in eine Struktur in go nicht einbetten kann. Allerdings habe ich damit herumgespielt und kam dabei auf und es funktioniert tatsächlich und ist ziemlich geradlinig.Embedding eine Karte in eine Struktur in der Sprache 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() 
} 

diese druckt map[foo:2]

Aber meine Frage ist, dass, gibt es irgendwelche negativen Seiten dieser Implementierung von Karten in structs zu verwenden, oder sind dort effizientere Wege, dies zu tun?

Antwort

3
  1. Sie können das tun, es ist absolut in Ordnung.

  2. Das ist nicht "einbetten". Einbetten bedeutet something specific - einschließlich eines namenlosen Feldes eines benannten Typs in einer Struktur. Ihre Karte ist nicht eingebettet, es ist ein reguläres Mitglied mit dem Namen "m".

  3. Die Antwort, die Sie verknüpften, ist leicht irreführend: die Antwort auf die Frage dort ("kann ich diese JSON-Ausgabe ohne eine MarshalJSON Methode glätten") ist Nein, aber es ist nicht wirklich wahr, dass das Einbetten einer Karte in einer Struktur ist verboten. Wenn Sie einen benannten Typ erstellen, bei dem es sich um einen Kartentyp handelt, können Sie ihn einfach in eine Struktur einbetten. Es gibt einfach nicht in JSON aus, wie es die Person, die diese Frage gestellt hat, gemocht hätte.
0

Es gibt keine inhärenten Nachteile. Einbetten von Karten in Strukturen ist eine gängige Praxis. Die einzigen Probleme mit der Implementierung wären außerhalb, wie die Verwendung einer Karte zugunsten eines Slices, wenn ein Slice besser ist. Dies ist jedoch hier nicht relevant. Die Auswahl des zu verwendenden Sammlungstyps (Segment vs Array vs map say) ist eine andere Diskussion und basiert mehr auf Ihren Datenzugriffsmustern. Im Allgemeinen ist es normal und idiomatisch, Strukturen mit beliebigen Sammlungstypen von Go zu erstellen (die Zuordnung ist eine davon).

EDIT: von Hobbs bemerkt beantworten den Missbrauch des Begriffs eingebettet sowohl in der Frage und meine Antwort, wie er darauf hinweist, ist die Karte nicht "eingebettet", das ist eine spezifische Sprachfunktion, das ist eigentlich nur Zusammensetzung und ich Ich hätte es oben so nennen sollen.

Verwandte Themen