Ich bin immer noch verwirrt, warum wir new
in Go haben.
Wenn Sie eine Struktur instanziieren möchten, müssen Sie dies tun
t := Thing{}
und Sie können einen Zeiger auf eine neue Instanz erhalten, indem Sie tun
t := &Thing{}
Es gibt aber auch diese Möglichkeit:
t := new(Thing)
Letzteres scheint dem Rest der Sprache ein wenig fremd zu sein. &Thing{}
ist so klar und prägnant wie new(Thing)
und verwendet nur Konstrukte, die Sie an anderer Stelle häufig verwenden. Es ist auch erweiterbarer, wenn Sie es in &Thing{3}
oder ändern &Thing{Feets:7}
.
Meiner Meinung nach ist ein zusätzliches Schlüsselwort 1 teuer, macht die Sprache komplexer und ergänzt das, was Sie wissen müssen. Und es kann Neulingen verborgen bleiben, was dahinter steckt, eine Struktur zu instanziieren.
Es macht auch noch ein reserviertes Wort.
Was steckt dahinter new
? Ist es manchmal nützlich? Sollen wir es benutzen?
1 : Ja, ich weiß, es ist kein Schlüsselwort auf Grammatikebene, Sie können es auch schattieren , aber das ändert nichts an der Tatsache, dass es für den vernünftigen Entwickler ein reserviertes Wort ist.
Antworten:
Die beste Art zu fragen ist wahrscheinlich die, die daran arbeiten. genau das, was ich getan habe !
Tl; dr: Es war ursprünglich vor
make
und da&{}
, und es ist immer noch die Funktion, die in einigen Situationen verwendet werden muss.Grundsätzlich sind hier die wichtigsten Teile zitiert:
Nach einer weiteren Antwort, die diese Art von Lösung zeigt:
Ich bat um weitere Klarstellung:
Es ist auch hauptsächlich aus historischen Gründen dort:
quelle
v := &(0)
die temporäre Variable ausführen und überspringen? (Ich weiß nicht Go.)0
es sich um eine wörtliche Konstante handelt, können Sie ihre Adresse nicht übernehmen. Ein Problem würde auftreten, wenn Sie auch einen bestimmten Typ möchten. Das ist der Grund, warum eine Syntax wie&int
oder&int(0)
nützlich sein könnte (dachte aber nicht viel über die beste Syntax nach). Aber es ist auch in Ordnung, es in zwei Zeilen zu machen, wie Collins gezeigt hat (vv := 0; v := &vv
).Go 2
es als schädlich angesehen wird.