导出与未导出的字段(私有与公共)
将导出名称以大写字母开头的结构字段。所有其他名称都未被导出。
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
}