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:
Was ist der Grund für Neues? Ist es etwas nützliches? Sollen wir es benutzen?
Sie können dies nicht ohne neue tun
v := new(int)
*v++
fmt.Println(*v)
new ist keine Schlagzeile von Go, sie wird nicht oft verwendet, aber wenn Sie sie brauchen, ist sie da.
Prost
Dave
Nach einer weiteren Antwort, die diese Art von Lösung zeigt:
vv := 0
v := &vv
*v++
fmt.Println(*v)
Ich bat um weitere Klarstellung:
Im Grunde genommen steht Daves Standpunkt also nicht wirklich?
Es gibt Stellen, an denen es unpraktisch ist, eine neue Variable einzuschleusen, um ihre Adresse zu ermitteln.
new (T) hat eine sofort eindeutige Bedeutung, anstatt eine mehrstufige Redewendung zu sein.
Daves Argument fällt nur dann weg, wenn die bloße technische Möglichkeit (Verzicht
new
) für sich allein zwingend ist.
Wurde dies nicht diskutiert, weil es nur offensichtlich war, dass Go es haben sollte, weil es in fast jeder Sprache verfügbar ist?
Das "sollen wir behalten new
?" von Zeit zu Zeit taucht eine Diskussion auf. Da wir es erst mit Go 2 herausnehmen können, scheint es, wenn ich das Versprechen richtig verstehe, nicht viel zu geben, wenn wir die Runde noch einmal drehen. Bis Go 2 denkbar ist, haben wir vielleicht ein paar andere und bessere Ideen ...
Chris
Es ist auch hauptsächlich aus historischen Gründen dort:
Sie müssen die Geschichte des Projekts berücksichtigen. Ich denke, neues wird zuerst vorgestellt, bevor es make gibt.
Das ist wahr. Tatsächlich hatten wir eine Weile Mühe, bevor wir auf die Idee kamen, Make zu machen. Wenn Sie sich die Repository-Protokolle ansehen, sehen Sie, dass make nur im Januar 2009 angezeigt wird, Revision 9a924177598f.
Die neue eingebaute Funktion ging auch der Idee von & {} voraus, die Adresse eines zusammengesetzten Literal zu übernehmen (und diese Syntax ist in gewissem Sinne falsch; es sollte wahrscheinlich (* T) {Felder von T} geben, aber es gab nicht genug Grund, es zu ändern).
Die neue Funktion ist nicht unbedingt erforderlich, aber Code scheint sie in der Praxis zu verwenden. Es ist schwer, es an diesem Punkt loszuwerden.
Ian