Go语言没有像其它语言一样有public、protected、private等访问控制修饰符,它是通过字母大小写来控制可见性的,如果定义的常量、变量、类型、接口、结构、函数等的名称是大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内
使用(相当于private,变量或常量也可以下划线开头)
注意这个访问权限的规则是跨包,包内都是”共有”的
code public
test/main.go
package main
import (
"test/visible"
)
func main() {
ps := &visibility.PrivateStruct{}
ps.Value = 2000
ps.ShowValue()
}
test/visible/visible.go
package visibility
import "fmt"
type PrivateStruct struct {
Value int
}
func (this *PrivateStruct) ShowValue() {
fmt.Println(this.Value)
}
code private
把函数改成小写,运行会出错
package visibility
import "fmt"
type PrivateStruct struct {
Value int
}
func (this *PrivateStruct) showValue() {
fmt.Println(this.Value)
}