Go Academy · Lekcja

Definiowanie i używanie struktur

Literały struktur, dostęp do pól i osadzanie

Lekcja 1 z 413 kroki

Definiowanie i używanie struktur to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Czym jest struct?

Struct grupuje powiązane pola różnych typów w ramach jednego nazwanego typu. Jest to podstawowy mechanizm języka Go do definiowania niestandardowych struktur danych — podobny do klasy, ale bez dziedziczenia.

Deklarowanie struct

Typ struct definiuje się za pomocą słowa kluczowego type:

package main
import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    p := Person{Name: "Alice", Age: 30, City: "London"}
    fmt.Println(p)
}

Literały struct

Dostępne są dwa style: z nazwanymi polami (zalecany) oraz pozycyjny (zależny od kolejności i podatny na błędy):

package main

type Point struct{ X, Y int }

func main() {
    p1 := Point{X: 1, Y: 2} // named — preferred
    p2 := Point{3, 4}        // positional — avoid in non-test code
    _ = p1; _ = p2
}

Dostęp do pól

Do odczytywania i zapisywania pól należy używać notacji kropkowej:

package main
import "fmt"

type Car struct{ Brand string; Speed int }

func main() {
    c := Car{Brand: "Tesla", Speed: 200}
    fmt.Println(c.Brand)  // Tesla
    c.Speed = 250
    fmt.Println(c.Speed)  // 250
}

Wartość zerowa struct

Wartość zerowa struct ustawia wszystkie jego pola na odpowiadające im wartości zerowe. Można bezpiecznie używać takiej struktury bez inicjalizacji:

package main
import "fmt"

type Config struct{ Debug bool; Port int; Host string }

func main() {
    var cfg Config
    fmt.Println(cfg) // {false 0 }
    cfg.Port = 8080
    fmt.Println(cfg) // {false 8080 }
}

Porównywanie struct

Struct można porównywać za pomocą ==, jeśli wszystkie jego pola można porównywać:

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    a := Point{1, 2}
    b := Point{1, 2}
    c := Point{3, 4}
    fmt.Println(a == b) // true
    fmt.Println(a == c) // false
}

Struct to typ wartościowy

Przypisanie struct kopiuje wszystkie jej pola. Zmiany w kopii nie wpływają na oryginał:

package main
import "fmt"

type Rect struct{ W, H int }

func main() {
    r1 := Rect{10, 20}
    r2 := r1
    r2.W = 99
    fmt.Println(r1) // {10 20}
    fmt.Println(r2) // {99 20}
}

Zagnieżdżone struct

Pole struct może samo być typu struct:

package main
import "fmt"

type Address struct{ City, Country string }
type Employee struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
    fmt.Println(e.Address.City) // Berlin
}

Pola eksportowane i nieeksportowane

Pola zaczynające się wielką literą są eksportowane (publiczne). Pola pisane małą literą są nieeksportowane (prywatne dla pakietu):

package main

type config struct {
    host string // unexported
    Port int    // exported
}

func main() {
    c := config{host: "localhost", Port: 8080}
    _ = c
}

Tagi struct

Tagi struct dostarczają metadanych (np. na potrzeby kodowania JSON). Są literałami tekstowymi umieszczanymi po typie pola:

package main

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}

func main() { _ = User{} }

Szybkie sprawdzenie

Jaka jest wartość zerowa pola bool w struct?

Podsumowanie: struct

Najważniejsze informacje:

  • Struct grupują powiązane pola w nazwanym typie
  • Należy używać literałów z nazwanymi polami — unikać literałów pozycyjnych
  • Struct to typy wartościowe — przypisanie powoduje kopiowanie
  • Pola zaczynające się wielką literą są eksportowane
  • Tagi struct dodają metadane używane przez biblioteki takie jak encoding/json

Polecenie do przećwiczenia

Należy zdefiniować struct Product z polami Name string, Price float64 oraz InStock bool. Należy utworzyć dwie instancje, porównać je za pomocą == i wyświetlić wynik.

Bezpłatny start

Ucz się Go dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Definiowanie i używanie struktur” jest bezpłatna?

Tak — pełny tekst „Definiowanie i używanie struktur” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Definiowanie i używanie struktur”?

Literały struktur, dostęp do pól i osadzanie Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Definiowanie i używanie struktur”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie i używanie struktur
  2. Metody struktur
  3. Wzorce konstruktorów
  4. Struktury anonimowe i kompozycja
← Powrót do Go Academy