Przejdź do głównej treści
eLearner.app
Moduł 1 · Lekcja 3 z 53/50 w kursie~10 min
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

Go
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"

Wpisano MaxRetry (int): można go przypisać tylko do int. PI i Namebez typu: zachowują się jak „literały” i dostosowują się do kontekst.

Go
const PI = 3.14

var f float32 = PI  // ok: PI è non tipata, diventa float32
var d float64 = PI  // ok

Bloki const

Możesz zgrupować kilka stałych w bloku:

Go
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ń:

Go
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ń:

Go
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 _:

Go
const (
    _  = iota // scarta 0
    KB        // 1
    MB        // 2
)

Twoja kolej

Ćwiczenie#go.m1.l3.e1
Próby: 0Ładowanie...

Zadeklaruj stały PI o wartości 3,14 na poziomie pakietu, a następnie wydrukuj go w pliku main.

Ładowanie edytora...
Pokaż wskazówkę

`const PI = 3.14` znajduje się na poziomie pakietu, poza plikiem main.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#go.m1.l3.e2
Próby: 0Ładowanie...

Zdefiniuj stały blok zawierający dni tygodnia (poniedziałek, wtorek, środa) ponumerowane od 1 za pomocą joty.

Ładowanie edytora...
Pokaż wskazówkę

Użyj `iota + 1` w pierwszej linii bloku; kolejne linie dziedziczą wyrażenie.

Rozwiązanie dostępne po 3 próbach

Quiz#go.m1.l3.e3
Gotowe

Co drukuje ten program?

Go
const (
    A = iota * 2
    B
    C
)
fmt.Println(A, B, C)
Opcje odpowiedzi

Podsumowanie

  • const dla 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ą.
  • iota zaczyna 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)).