Nomi esportati e non esportati
Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 4 di 107.
In Go, la prima lettera di un nome ne determina la visibilità. I nomi che iniziano con una lettera maiuscola sono esportati (accessibili da altri pacchetti). I nomi che iniziano con una lettera minuscola non sono esportati (privati del pacchetto).
Nomi esportati: visibili al di fuori del pacchetto
type User struct {
Name string // Exported field
Email string // Exported field
}
func CreateUser(name string) User { // Exported function
return User{Name: name}
}Nomi non esportati: visibili solo all'interno del pacchetto
type secret struct { // Struct non esportata
password string // Campo non esportato
}
func validate() bool { // Funzione non esportata
return true
}Misto: struct esportata con alcuni campi non esportati
type Account struct {
Username string // Esportato - accessibile ovunque
Email string // Esportato - accessibile ovunque
password string // Non esportato - accessibile solo all'interno del pacchetto
}Questa convenzione di denominazione sostituisce i modificatori di accesso come public e private presenti in altri linguaggi.
// Lettera maiuscola = Esportato (pubblico)
// Lettera minuscola = Non esportato (privato)
func SaveData() {} // Esportato
func loadData() {} // Non esportatoSeguire questa convenzione è essenziale in Go. Quando altri pacchetti importano il tuo codice, possono accedere solo ai nomi che iniziano con una lettera maiuscola.
Sfida
MedioCorreggi tutti i nomi in product.go per seguire la convenzione di denominazione degli identificatori esportati di Go. Scrivi con la maiuscola la prima lettera di:
- Il nome della struct:
product→Product - Tutti i nomi dei campi:
name,price,stock - Tutti i nomi delle funzioni:
totalValue,displayInfo - Tutti i riferimenti ai campi all'interno delle funzioni
Provalo tu
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))
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti di OOP in Go
File esterniWorkspace e moduli GoPacchetti e importazioniNomi esportati e non esportatiIntroduzione all’OOP in GoGli struct come classiDefinire metodi sugli structReceiver con puntatore vs receiver con valoreInizializzazione degli structFunzioni costruttriciRiepilogo - Calcolatrice semplice4Interfacce
Introduzione alle interfacceImplementazione implicitaL’interfaccia come contrattoInterfaccia vuota (any)Asserzione di tipoSwitch sul tipoComposizione di interfacceInterfacce Stringer ed ErrorRipasso - Calcolatore di forme7Incapsulamento
Campi esportati e non esportatiIncapsulamento a livello di packageMetodi Getter e SetterNascondimento delle informazioni in GoRiepilogo - Registri degli studenti10Tipi generici (Go 1.18+)
Introduzione ai tipi genericiParametri di tipoVincoli di tipoStruct genericheSoluzione alternativa per i metodi genericiRiepilogo - Collezione generica13Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneModello SingletonModello FactoryModello Abstract FactoryModello ObserverModello Strategy2Approfondimento su tipi e struct
Tipi di base e compostiDefinizioni di tipi personalizzatiTag delle structStruct anonimeStruct annidateValori zero e predefinitiRipasso - Rubrica5Composizione invece dell'ereditarietà
Perché Go non ha l'ereditarietàFondamenti dell'embedding delle structPromozione dei metodiEmbedding di più structEmbedding e aggregazione a confrontoMascheramento dei metodi embeddedRiepilogo: gerarchia dei dipendenti8Gestione degli errori e OOP
L'interfaccia errorTipi di errore personalizzatiWrapping degli errori (fmt.Errorf)Errori sentinellaerrors.Is() ed errors.As()Panic, Defer e RecoverRiepilogo - Parser di file11Libreria standard e OOP
io.Reader e io.Writersort.InterfaceInterfaccia fmt.Stringerencoding/json con le structInterfaccia http.HandlerRipasso - modelli REST API14Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositeMiddleware come Decorator3Puntatori e memoria
Concetti base dei puntatori in GoPuntatori a structPassaggio per valore vs per riferimentoLa funzione new()Garbage collection in GoRiepilogo - Costruttore di liste concatenate6Polimorfismo in Go
Polimorfismo tramite interfacceDuck typing in GoRegole di soddisfacimento delle interfacceCollezioni polimorficheIniezione delle dipendenzeRiepilogo - Elaboratore di pagamenti9Concorrenza e OOP
Basi delle goroutineCanali e comunicazioneCanali bufferizzati vs non bufferizzatiIstruzione selectsync.Mutex e sync.RWMutexsync.WaitGroupProgettazione di struct thread-safeRiepilogo: worker poolEsercitati da solo: Compilatore Go online