Lekcje modułu (3/5)
Stałe i iota
Stałe to niezmienne wartości znane w czasie kompilacji. W Go są
zadeklarowany za pomocą const i może być wpisany lub niewpisany. Nietypowane mają
supermoc: dostosowują się do typu wymaganego przez kontekst, oszczędzając cię
od konieczności pisania jawnych konwersji.
Podstawowa składnia
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"Wpisano MaxRetry (int): można go przypisać tylko do int.
PI i Name są bez typu: zachowują się jak „literały” i dostosowują się do
kontekst.
const PI = 3.14
var f float32 = PI // ok: PI è non tipata, diventa float32
var d float64 = PI // okBloki const
Możesz zgrupować kilka stałych w bloku:
const (
StateInitial = "INIT"
StateReady = "READY"
StateError = "ERROR"
)iota: licznik wyliczeniowy
Wewnątrz bloku const specjalny identyfikator iota zaczyna się od 0
i zwiększa się o 1 w każdej linii. Jest to idiom służący do dokonywania wyliczeń:
const (
Monday = iota // 0
Tuesday // 1
Wednesday // 2
Thursday // 3
Friday // 4
)Kolejne linie dziedziczą wyrażenie, jeśli go nie udostępniają.
Dlatego wystarczy napisać Tuesday bez powtarzania = iota.
Wzory z wyrażeniami
iota może pojawić się wewnątrz dowolnych wyrażeń:
const (
KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
MB // 1 << 20
GB // 1 << 30
TB // 1 << 40
)Pomijanie wartości
Jeśli nie chcesz przypisywać wartości do linii (ponieważ chcesz, aby iota
i tak zwiększyć), użyj pustego identyfikatora _:
const (
_ = iota // scarta 0
KB // 1
MB // 2
)Twoja kolej
Zadeklaruj stały PI o wartości 3,14 na poziomie pakietu, a następnie wydrukuj go w pliku main.
Pokaż wskazówkę
`const PI = 3.14` znajduje się na poziomie pakietu, poza plikiem main.
Rozwiązanie dostępne po 3 próbach
Zdefiniuj stały blok zawierający dni tygodnia (poniedziałek, wtorek, środa) ponumerowane od 1 za pomocą joty.
Pokaż wskazówkę
Użyj `iota + 1` w pierwszej linii bloku; kolejne linie dziedziczą wyrażenie.
Rozwiązanie dostępne po 3 próbach
Co drukuje ten program?
const (
A = iota * 2
B
C
)
fmt.Println(A, B, C)Podsumowanie
constdla niezmiennych wartości znanych w czasie kompilacji.- Bez typu stałe dostosowują się do kontekstu: nie jest wymagana żadna konwersja.
const ( ... )blokuje wartości powiązane z grupą.iotazaczyna się od 0 w każdym bloku i zwiększa się linia po linii.- Wzorce: wyliczenie (
= iota), maska bitowa (= 1 << iota), jednostki (= 1 << (10*iota)).