Nazwy eksportowane i nieeksportowane
Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 4 z 107.
W Go pierwsza litera nazwy określa jej widoczność. Nazwy zaczynające się od wielkiej litery są eksportowane (dostępne z innych pakietów). Nazwy zaczynające się od małej litery są nieeksportowane (prywatne dla pakietu).
Eksportowane nazwy: widoczne poza pakietem
type User struct {
Name string // Eksportowane pole
Email string // Eksportowane pole
}
func CreateUser(name string) User { // Eksportowana funkcja
return User{Name: name}
}Nepublikowane nazwy: widoczne tylko wewnątrz pakietu
type secret struct { // Nieeksportowana struktura
password string // Nieeksportowane pole
}
func validate() bool { // Nieeksportowana funkcja
return true
}Mieszany: eksportowana struktura z niektórymi nieeksportowanymi polami
type Account struct {
Username string // Eksportowane - dostępne wszędzie
Email string // Eksportowane - dostępne wszędzie
password string // Nieeksportowane - dostępne tylko wewnątrz pakietu
}Ta konwencja nazewnictwa zastępuje modyfikatory dostępu, takie jak public i private, spotykane w innych językach.
// Wielka litera = Eksportowane (publiczne)
// Mała litera = Nieeksportowane (prywatne)
func SaveData() {} // Eksportowane
func loadData() {} // NieeksportowanePrzestrzeganie tej konwencji jest niezbędne w Go. Gdy inne pakiety importują twój kod, mogą uzyskać dostęp tylko do nazw zaczynających się wielką literą.
Wyzwanie
ŚredniPopraw wszystkie nazwy w product.go, aby były zgodne z konwencją nazewnictwa eksportowanych elementów w Go. Zapisz pierwszą literę wielką w:
- nazwie struktury:
product→Product - wszystkich nazwach pól:
name,price,stock - wszystkich nazwach funkcji:
totalValue,displayInfo - wszystkich odwołaniach do pól wewnątrz funkcji
Spróbuj swoich sił
package main
import "fmt"
func main() {
var name string
var price float64
var stock int
fmt.Scan(&name, &price, &stock)
p := Product{
Name: name,
Price: price,
Stock: stock,
}
fmt.Println(DisplayInfo(p))
fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}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