Warum kann nicht eine Zeichenfolge sein, die null-in Gehen?
Programm verfügbar auf Den Spielplatz Gehen liest
package main
import "fmt"
func main() {
var name string = nil
fmt.Println(name)
}
und ergibt einen Fehler
prog.go:6: cannot use nil as type string in assignment
Verstehe ich ""
ist die "null-Wert" für Streicher. Ich verstehe nicht, warum kann ich nicht zuordnen nil
zu meinem string
.
Sie können nicht zuweisen
Durch die Verhinderung der null-Zuweisung für Zeichenfolgen der Sprache eliminiert eine Klasse von Fehlern. Beachten Sie string-Pointer zugeordnet werden kann, gegen null geht.
Nicht sicher, warum wurde dies nach unten gestimmt. Scheint wie eine ziemlich berechtigte Frage von mir
nil
zu int
s entweder. Warum überrascht Euch das für Saiten?Durch die Verhinderung der null-Zuweisung für Zeichenfolgen der Sprache eliminiert eine Klasse von Fehlern. Beachten Sie string-Pointer zugeordnet werden kann, gegen null geht.
Nicht sicher, warum wurde dies nach unten gestimmt. Scheint wie eine ziemlich berechtigte Frage von mir
InformationsquelleAutor user319286 | 2016-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfache Antwort ist, dass
nil
ist nicht definiert, um einen gültigen Wert für den Typstring
im - Sprachspezifikation....aber möchten Sie vielleicht eine längere Antwort?
nil
ist der Wert null für Zeiger, interfaces, channels, slices, maps und Funktion Arten, und es stellt eine nicht initialisierte Zustand.Betrachten Sie die folgenden Variablen-Deklarationen:
Scheint es naheliegend, dass alle diese Variablen haben würde, ein Wert, der für nicht initialisierten Zustand.
a
erklärt wurde, wie ein Zeiger, aber was wäre es, wenn wir noch nicht wies es an etwas?nil
ist eine offensichtliche null-Wert für diese Typen.Als für Kanäle, - Scheiben und-Karten, deren Wert null ist
nil
aus dem einfachen Grund, dass Ihre Umsetzung so ist, dass Sie müssen explizit initialisiert werden, bevor Sie verwendet werden können. Dies ist vor allem aus performance-Gründen, diese Typen sind alle intern dargestellt als mehr oder weniger komplexe Daten-Strukturen, und initialisieren Sie ist nicht frei.Jedoch eine
string
erfordert keine Initialisierung, und es scheint natürlich, dass der Standardwert, null Wert, für den Sie einen neuen string-Variablen eine leere Zeichenfolge ist, wird""
. Daher gibt es einfach keinen Grund fürnil
eine gültige Zeichenfolge, und indem es der Spezifikation würde nur die Sprache komplizierter und viel mehr umständlich, mit zu arbeiten.Außerdem, was würde
nil
Typstring
darstellen? Ein leerer string? Wir haben bereits, dass. Ein nicht initialisierter string? Es gibt keine solche Sache.Tipp: Wenn der Umgang mit optionalen Parametern - Sie können jedoch, übergeben Sie einen Zeiger auf den string, und der Zeiger kann null 🙂 (Sie können auch eine leere Zeichenfolge.)
InformationsquelleAutor Aedolon
In gehen
string
ist ein Datentyp, ist es nicht ein Zeiger auf ein array wie C/C++. Als solche können Sie nicht zuordnen konnten.InformationsquelleAutor GarMan
Aedolon machte einige gute Punkte, aber, weiter zu gehen, in anderen Sprachen Saiten sind bequeme Möglichkeiten, arrays von bytes, wie Sie Zeichen. Wir brauchen, um dies zu tun eine Menge, also in diesem speziellen Anwendungsfall für ein array bekommt eine Menge der Sprache zu unterstützen, um es einfacher zu verwenden. Doch am Kern der Sache, Sie arbeiten mit einem array, das ist oft in der Lage zu sein, null in einer Sprache, weil es eine Referenz geben. Das heißt, der string ist nicht wirklich null ist, wird der Zeiger auf das array null ist. Weil viele Sprachen verschmelzen diese beiden Dinge, die Programmierer haben zu überprüfen, ob ein string null ist, bevor Sie es verwenden.
Gehen gar nicht. Ein string ist nicht null, weil die Struktur der Daten in gehen Sie nicht lassen Sie es. Sie können einen Zeiger auf ein byte-array holding Charakter Darstellungen im gehen null sein, das ist aber kein string.
InformationsquelleAutor Roger Hill