Definiowanie i używanie struktur
Literały struktur, dostęp do pól i osadzanie
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.
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
- Definiowanie i używanie struktur
- Metody struktur
- Wzorce konstruktorów
- Struktury anonimowe i kompozycja