Menu
Coddy logo textTech

Go Cheat Sheet: ściąga z Golanga

Ostatnia aktualizacja

Hello World i struktura programu

Każdy program w Go należy do pakietu; punktem wejścia jest func main w pakiecie main.

OperacjaSkładnia
Deklaracja pakietupackage main
Import pakietuimport "fmt"
Import wielu pakietówimport (\n "fmt"\n "os"\n)
Punkt wejściafunc main() { ... }
Wypisanie liniifmt.Println("Hello, World!")
Wypisanie z formatowaniemfmt.Printf("%d items\n", n)
Uruchomienie plikugo run main.go
Zbudowanie pliku wykonywalnegogo build

Zmienne i typy

Go jest typowany statycznie, ale z := sam wnioskuje typy.

OperacjaSkładnia
Deklaracja z typemvar age int = 30
Deklaracja z wnioskowaniemvar name = "Ada"
Krótka deklaracjacount := 0
Kilka narazx, y := 1, 2
Stałaconst Pi = 3.14
Wartości zerowe0, "", false, nil
Podstawowe typyint, float64, string, bool, byte, rune
Konwersja typówf := float64(i)

Sterowanie przepływem

Go ma tylko jedno słowo kluczowe pętli, for, i nie używa nawiasów wokół warunków.

OperacjaSkładnia
If / elseif x > 0 { ... } else { ... }
If z instrukcją inicjalizującąif v, ok := m[k]; ok { ... }
Pętla for (w stylu C)for i := 0; i < 10; i++ { ... }
Pętla w stylu whilefor x < 100 { ... }
Pętla nieskończonafor { ... }
Range po slicefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
Switch bez wyrażeniaswitch { case x > 0: ... }
Break / continuebreak, continue

Funkcje

Funkcje są wartościami pierwszej klasy i mogą zwracać wiele wyników.

OperacjaSkładnia
Podstawowa funkcjafunc add(a int, b int) int { return a + b }
Wspólny typ parametrówfunc add(a, b int) int { ... }
Wiele wartości zwracanychfunc divmod(a, b int) (int, int) { return a / b, a % b }
Nazwane wartości zwracanefunc split(sum int) (x, y int) { x = sum / 2; return }
Funkcja o zmiennej liczbie argumentówfunc sum(nums ...int) int { ... }
Funkcja anonimowaf := func() { ... }
Domknięciefunc counter() func() int { ... }
Defer (wykonuje się przy powrocie)defer file.Close()

Slice'y i tablice

Tablice mają stały rozmiar; slice'y to dynamiczne widoki na tablice.

OperacjaSkładnia
Tablica o stałym rozmiarzevar a [3]int
Literał slice'anums := []int{1, 2, 3}
Utworzenie slice'as := make([]int, 0, 10)
Dołączenies = append(s, 4)
Długość / pojemnośćlen(s), cap(s)
Wycinek slice'as[1:3]
Kopiowaniecopy(dst, src)
Iteracjafor i, v := range s { ... }

Mapy

Mapy to wbudowane w Go tablice mieszające.

OperacjaSkładnia
Utworzenie mapym := make(map[string]int)
Literał mapym := map[string]int{"a": 1, "b": 2}
Ustawienie wartościm["c"] = 3
Pobranie wartościv := m["a"]
Sprawdzenie istnieniav, ok := m["x"]
Usunięcie kluczadelete(m, "a")
Długośćlen(m)
Iteracjafor k, v := range m { ... }

Struktury i metody

Struktury grupują pola; metody dodają zachowanie przez odbiorcę (receiver).

OperacjaSkładnia
Definicja strukturytype Point struct { X, Y int }
Utworzenie instancjip := Point{X: 1, Y: 2}
Dostęp do polap.X
Wskaźnik na strukturęp := &Point{1, 2}
Metoda z odbiorcą wartościowymfunc (p Point) Dist() float64 { ... }
Metoda z odbiorcą wskaźnikowymfunc (p *Point) Move(dx int) { p.X += dx }
Struktura osadzonatype Circle struct { Point; R int }
Tagi strukturName string z tagiem json:"name" w odwrotnych apostrofach

Interfejsy

Interfejsy są spełniane niejawnie: kwalifikuje się każdy typ z odpowiednimi metodami.

OperacjaSkładnia
Definicja interfejsutype Shape interface { Area() float64 }
Implementacja (niejawna)func (c Circle) Area() float64 { ... }
Pusty interfejs (any)var x interface{} lub var x any
Asercja typus, ok := x.(string)
Switch po typieswitch v := x.(type) { case int: ... }
Interfejs Stringerfunc (p Point) String() string { ... }

Gorutyny i kanały

Gorutyny to lekkie wątki; kanały przekazują między nimi wartości.

OperacjaSkładnia
Uruchomienie gorutynygo doWork()
Utworzenie kanałuch := make(chan int)
Kanał buforowanych := make(chan int, 5)
Wysłanie do kanałuch <- 42
Odbiór z kanałuv := <-ch
Zamknięcie kanałuclose(ch)
Range po kanalefor v := range ch { ... }
Select na kanałachselect { case v := <-ch: ...; default: ... }
WaitGroupvar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Obsługa błędów

Go zwraca błędy jako wartości: nie ma wyjątków.

OperacjaSkładnia
Zwrócenie błędufunc read() (string, error) { return "", err }
Sprawdzenie błęduif err != nil { return err }
Utworzenie błęduerrors.New("not found")
Błąd z formatowaniemfmt.Errorf("bad id %d", id)
Opakowanie błędufmt.Errorf("load: %w", err)
Rozpakowanie / dopasowanieerrors.Is(err, os.ErrNotExist)
Dopasowanie po typieerrors.As(err, &target)
Panic / recoverdefer func() { recover() }()

Najczęściej używana składnia Go na jednej stronie. Ten Go cheat sheet to szybka ściąga z podstaw języka: zmienne i typy, slice'y i mapy, struktury i interfejsy, a do tego gorutyny i kanały, dzięki którym Golang błyszczy we współbieżności.

Wszystko tutaj to standardowy Go, który kompiluje się oficjalnym zestawem narzędzi. Skopiuj to, czego potrzebujesz, albo uruchom każdy fragment w edytorze online Go, bez instalacji. Uczysz się Go? Darmowy interaktywny kurs Go w Coddy krok po kroku omawia slice'y, struktury, interfejsy i gorutyny.

Go cheat sheet: najczęstsze pytania

Czy ten Go cheat sheet jest darmowy?
Tak. Ta ściąga z Go jest całkowicie darmowa i nie wymaga rejestracji. Dodaj ją do zakładek i wracaj, gdy potrzebujesz sprawdzić operację na slice'ach, wzorzec z kanałami albo metodę struktury.
Czym różni się := od var w Go?
var x = 0 deklaruje zmienną i działa wszędzie, także na poziomie pakietu. x := 0 to krótka deklaracja zmiennej: jednocześnie deklaruje i przypisuje, wnioskuje typ i można jej używać tylko wewnątrz funkcji. Używaj var, gdy potrzebujesz jawnego typu albo zmiennej na poziomie pakietu, a := do zwięzłych deklaracji lokalnych.
Czym są gorutyny i kanały?
Gorutyna to lekki wątek zarządzany przez środowisko uruchomieniowe Go: uruchamiasz ją, pisząc go someFunc(). Kanały to typowane łącza, dzięki którym gorutyny bezpiecznie się komunikują: jedna gorutyna wysyła przez ch <- v, a druga odbiera przez <-ch. Razem tworzą podstawowy model współbieżności Go, streszczony w powiedzeniu "dziel się pamięcią, komunikując się".
Czy mogę ćwiczyć Go online?
Tak. Otwórz edytor online Go, aby uruchomić dowolny fragment z tej ściągi w przeglądarce, bez instalowania narzędzi Go. Gdy chcesz uczyć się bardziej systematycznie, darmowy interaktywny kurs Go w Coddy prowadzi krok po kroku od zmiennych i slice'ów do gorutyn i kanałów.
Czy ta ściąga nadaje się dla początkujących?
Tak. Jest ułożona od najczęstszych tematów (zmienne, sterowanie przepływem, funkcje) do bardziej zaawansowanych (gorutyny, kanały, obsługa błędów), więc górnych sekcji możesz używać od pierwszego dnia, a resztę poznawać z czasem.
Ilustracja języków programowania w Coddy

Naucz się języka Go z Coddy

ZACZNIJ