Próbowałem:
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 }
Po pierwsze, deklaracja i inicjalizacja działają dobrze, ale druga, trzecia i czwarta nie działają. Jak mogę zadeklarować i zainicjować tablicę const wartości zmiennoprzecinkowych?
[...]T
składnia to cukier[123]T
. Tworzy tablicę o stałym rozmiarze, ale pozwala kompilatorowi dowiedzieć się, ile elementów się w niej znajduje.f(xs [5]int)
, nie wiedziałbyś, czy przekazana tablica była stała czy zmienna.cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
Od Effective Go :
Plasterki i tablice są zawsze oceniane w czasie wykonywania:
[...]
mówi kompilatorowi, aby obliczył długość samej tablicy. Plasterki zawijają tablice i w większości przypadków są łatwiejsze w użyciu. Zamiast używać stałych, po prostu spraw, aby zmienne były niedostępne dla innych pakietów, używając małej pierwszej litery:thisIsPrivate
jest dostępny tylko w zdefiniowanym pakiecie. Jeśli potrzebujesz dostępu do odczytu z zewnątrz, możesz napisać prostą funkcję getter (zobacz Getters w golang ).źródło
W Go nie ma czegoś takiego jak stała tablicowa.
Cytowanie ze specyfikacji języka Go: Stałe :
Wyrażenie stałe (które jest wykorzystywane do inicjowania stałej) może obejmować jedynie ciągłe operandy i oceniane są w czasie kompilacji.
Specyfikacja zawiera listę różnych typów stałych. Zauważ, że możesz tworzyć i inicjować stałe za pomocą stałych wyrażeń typów mających jeden z dozwolonych typów jako typ bazowy . Na przykład jest to ważne:
Wyjście (wypróbuj na Go Playground ):
Jeśli potrzebujesz tablicy, może to być tylko zmienna, ale nie stała.
Polecam ten świetny artykuł na blogu o stałych: Stałe
źródło
var arr = [2]int{2, 3}
Jak wspominali inni, nie ma do tego oficjalnej konstrukcji Go. Najbliższa, jaką mogę sobie wyobrazić, byłaby funkcja zwracająca wycinek. W ten sposób możesz zagwarantować, że nikt nie będzie manipulował elementami oryginalnego wycinka (ponieważ jest on „na stałe zakodowany” w tablicy).
Skróciłem twój kawałek, żeby był ... krótszy ...:
źródło
cannot use [6]string literal (type [6]string) as type []string in return argument
więcreturn []float32 { ... }
...
, aby zadeklarować literał wycinka zamiast literału tablicowego. (2) zmień typ powrotu na[6]float32
. (3) ekspresja przypisać do zmiennej tablicoweja := [...]float32 { (etc.) }
i powrót plaster wszystkich elementów:return a[:]
. (Literały tablicowe nie są adresowalne, nie jestem pewien dlaczego.)