Ich habe versucht:
const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
Erstens funktionieren Deklaration und Initialisierung einwandfrei, aber die zweite, dritte und vierte funktionieren nicht. Wie kann ich ein const-Array von Floats deklarieren und initialisieren?
[...]T
Syntax ist Zucker für[123]T
. Es erstellt ein Array mit fester Größe, lässt den Compiler jedoch herausfinden, wie viele Elemente sich darin befinden.f(xs [5]int)
würden Sie nicht wissen, ob das übergebene Array konstant oder veränderlich ist, wenn Sie eine Funktion definiert haben .cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
Von Anfang an :
Slices und Arrays werden immer zur Laufzeit ausgewertet:
[...]
Weist den Compiler an, die Länge des Arrays selbst herauszufinden. Slices umschließen Arrays und sind in den meisten Fällen einfacher zu bearbeiten. Anstatt Konstanten zu verwenden, machen Sie die Variablen einfach für andere Pakete unzugänglich, indem Sie einen Anfangsbuchstaben in Kleinbuchstaben verwenden:thisIsPrivate
ist nur in dem Paket verfügbar, das es definiert hat. Wenn Sie Lesezugriff von außen benötigen, können Sie eine einfache Getter-Funktion schreiben (siehe Getter in Golang ).quelle
In Go gibt es keine Array-Konstante.
Zitat aus der Go-Sprachspezifikation: Konstanten :
Eine Constant - Expression (die verwendet wird , eine Konstante zu initialisieren) enthalten kann nur konstante Operanden enthalten und wird zur Kompilierungszeit ausgewertet.
In der Spezifikation sind die verschiedenen Konstantentypen aufgeführt. Beachten Sie, dass Sie Konstanten mit konstanten Ausdrücken von Typen erstellen und initialisieren können, die einen der zulässigen Typen als zugrunde liegenden Typ haben . Zum Beispiel ist dies gültig:
Ausgabe (versuchen Sie es auf dem Go-Spielplatz ):
Wenn Sie ein Array benötigen, kann es nur eine Variable sein, aber keine Konstante.
Ich empfehle diesen großartigen Blog-Artikel über Konstanten: Konstanten
quelle
var arr = [2]int{2, 3}
Wie andere bereits erwähnt haben, gibt es dafür kein offizielles Go-Konstrukt. Das nächste, was ich mir vorstellen kann, wäre eine Funktion, die ein Slice zurückgibt. Auf diese Weise können Sie sicherstellen, dass niemand die Elemente des ursprünglichen Slice manipuliert (da es im Array "fest codiert" ist).
Ich habe deine Scheibe gekürzt, um sie ... kürzer zu machen ...:
quelle
cannot use [6]string literal (type [6]string) as type []string in return argument
soreturn []float32 { ... }
...
, um ein Slice-Literal anstelle eines Array-Literals zu deklarieren. (2) Ändern Sie den Rückgabetyp in[6]float32
. (3) Weisen Sie den Ausdruck einer Array-Variablen zua := [...]float32 { (etc.) }
und geben Sie den Slice aller Elemente zurück :return a[:]
. (Array-Literale sind nicht adressierbar, ich weiß nicht warum.)