可导出vs不可导出字段(公有vs私有)

结构体的字段名若为大写字母开头,则为可导出字段,否则为不可导出字段。

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

不可导出的字段只能被相同package内的代码访问。因此,如果您确定要从不同的包访问一个字段,则它的名字应该以大写字母开头。

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包中,您访问UserIDaccessToken都没问题。

bank包的实现如下:

package bank

type Account struct {
	UserID      int
	accessToken string
}

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

最后更新于