Menu
Coddy logo textTech

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 esportato

Seguire questa convenzione è essenziale in Go. Quando altri pacchetti importano il tuo codice, possono accedere solo ai nomi che iniziano con una lettera maiuscola.

challenge icon

Sfida

Medio

Correggi 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))
}
quiz iconMettiti alla prova

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

Esercitati da solo: Compilatore Go online