Go Campi Esportati vs. Non Esportati (Privati ​​vs Pubblico)


Esempio

Vengono esportati i campi Struct i cui nomi iniziano con una lettera maiuscola. Tutti gli altri nomi non sono stati esportati.

type Account struct {
    UserID      int    // exported
    accessToken string // unexported
}

I campi non esportati possono essere raggiunti solo dal codice all'interno dello stesso pacchetto. Pertanto, se si accede sempre a un campo da un pacchetto diverso , il suo nome deve iniziare con una lettera maiuscola.

package main

import "bank"

func main() {
    var x = &bank.Account{
        UserID: 1,          // this works fine
        accessToken: "one", // this does not work, since accessToken is unexported
    }
}

Tuttavia, dall'interno bank pacchetto bank , è possibile accedere a UserId e accessToken senza problemi.

La bank pacchetti potrebbe essere implementata in questo modo:

package bank

type Account struct {
    UserID int
    accessToken string
}

func ProcessUser(u *Account) {    
    u.accessToken = doSomething(u) // ProcessUser() can access u.accessToken because 
                                   // it's defined in the same package
}