Inicjalizacja struktur
Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 9 z 107.
Go oferuje kilka sposobów inicjalizacji struktur, z których każdy przydaje się w różnych sytuacjach.
Inicjalizacja nazwanych pól
type Person struct {
Name string
Age int
City string
}
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}Inicjalizacja pozycyjna (kolejność musi odpowiadać deklaracji pól)
p2 := Person{"Bob", 30, "London"}Inicjalizacja wartościami zerowymi (wszystkie pola otrzymują wartości domyślne)
p3 := Person{}
// Name: "", Age: 0, City: ""
Częściowa inicjalizacja (nieustawione pola otrzymują wartości zerowe)
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""
Wskaźnik do struktury przy użyciu &
p5 := &Person{
Name: "Diana",
Age: 28,
City: "Paris",
}
fmt.Println(p5.Name) // DianaUżycie var, a następnie przypisywanie pól
var p6 Person
p6.Name = "Eve"
p6.Age = 22Inicjalizacja nazwanych pól to najczęściej stosowane i najbardziej czytelne podejście. Użyj &, gdy potrzebujesz wskaźnika do struktury.
Wyzwanie
ŚredniUtwórz trzy obiekty Player, używając różnych metod inicjalizacji:
- player1: Inicjalizacja z nazwanymi polami przy użyciu wartości wejściowych
- player2: Inicjalizacja z nazwanymi polami: Name: "Guest", Class: "Novice", HitPoints: 50
- player3: Użyj deklaracji
var, a następnie przypisz każde pole indywidualnie
Spróbuj swoich sił
package main
import "fmt"
func main() {
var name, class string
var hp int
fmt.Scan(&name, &class, &hp)
// TODO: Utwórz player1, inicjalizując pola po nazwie wartościami wejściowymi
// TODO: Utwórz player2, inicjalizując pola po nazwie:
// Name: "Guest", Class: "Novice", HitPoints: 50
// TODO: Utwórz player3 za pomocą deklaracji var, a następnie przypisz wartości polom:
// Name: "Hero", Class: "Knight", HitPoints: 200
fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP w Go
Pliki zewnętrzneObszar roboczy i moduły GoPakiety i importyNazwy eksportowane i nieeksportowaneWprowadzenie do OOP w GoStruktury jako klasyDefiniowanie metod dla strukturOdbiorniki wskaźnikowe i wartościoweInicjalizacja strukturFunkcje konstruktoraPodsumowanie – prosty kalkulator4Interfejsy
Wprowadzenie do interfejsówImplementacja niejawnaInterfejs jako kontraktPusty interfejs (any)Asercja typuPrzełącznik typówKompozycja interfejsówInterfejsy Stringer i ErrorPowtórka — kalkulator figur7Hermetyzacja
Pola eksportowane i nieeksportowaneHermetyzacja na poziomie pakietuMetody pobierające i ustawiająceUkrywanie informacji w GoPowtórka – dane studentów10Typy generyczne (Go 1.18+)
Wprowadzenie do typów generycznychParametry typówOgraniczenia typówStruktury generyczneObejście ograniczeń metod generycznychPodsumowanie — generyczna kolekcja2Typy i struktury w praktyce
Typy proste i złożoneDefiniowanie własnych typówTagi pól strukturStruktury anonimoweStruktury zagnieżdżoneWartości zerowe i domyślnePodsumowanie – książka kontaktów5Kompozycja zamiast dziedziczenia
Dlaczego Go nie ma dziedziczeniaPodstawy osadzania strukturPromowanie metodOsadzanie wielu strukturOsadzanie a agregacjaPrzesłanianie osadzonych metodPodsumowanie — hierarchia pracowników8Obsługa błędów i programowanie obiektowe
Interfejs błęduWłasne typy błędówOpakowywanie błędów (fmt.Errorf)Błędy wartowniczeerrors.Is() i errors.As()Panic, Defer i RecoverPodsumowanie — parser plików3Wskaźniki i pamięć
Podstawy wskaźników w GoWskaźniki do strukturPrzekazywanie przez wartość a przez referencjęFunkcja new()Odśmiecanie pamięci w GoPowtórka — kreator listy wiązanej6Polimorfizm w Go
Polimorfizm za pomocą interfejsówDuck typing w GoZasady spełniania interfejsówKolekcje polimorficzneWstrzykiwanie zależnościPowtórka — procesor płatności9Współbieżność i OOP
Podstawy goroutinesKanały i komunikacjaKanały buforowane i niebuforowaneInstrukcja selectsync.Mutex i sync.RWMutexsync.WaitGroupProjektowanie struktur bezpiecznych wątkowoPowtórka – pula workerów12Zaawansowane zagadnienia programowania obiektowego
Wzorzec opcji funkcyjnychWzorzec Builder w GoŁańcuchowe wywoływanie metodAliasy typów a definicje typówPodstawy refleksjiPrzegląd generowania koduPoćwicz samodzielnie: Kompilator Go online