导出与未导出的字段(私有与公共)

将导出名称以大写字母开头的结构字段。所有其他名称都未被导出。

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
}