匯出與未匯出的欄位(私有與公共)

將匯出名稱以大寫字母開頭的結構欄位。所有其他名稱都未被匯出。

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

未匯出的欄位只能由同一包中的程式碼訪問。因此,如果你要訪問其他包中的欄位,則其名稱需要以大寫字母開頭。

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
    }
}

但是,從 bank 包中,你可以無問題地訪問 UserId 和 accessToken。

bank 可以像這樣實現:

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
}