- Go 没有显式的
private
、public
关键字,通过首字母大小写进行访问控制标识。 - 在 Go 中,名称首字母大写表示这个名称(变量、函数、结构体等)是 导出的,可以在包外部被访问和使用。
1. 导出函数
go
package example
func SetupKeyValueStore() {}// 导出函数,包外部可见
func setupHelper() {}// 未导出函数,仅包内部可见
2. 导出结构体
go
package example
type Config struct { // 导出结构体
Port int // 导出字段
Username string // 导出字段
password string // 未导出字段
}
3. 导出接口
go
type Database interface { // 导出接口
Connect() error // 导出方法
disconnect() error // 未导出方法
}
4. 导出常量
go
package example
const DefaultTimeout = 30 // 导出常量
const defaultRate = 100 // 未导出常量
5. 导出变量
go
package example
var Version = "1.0.0" // 导出变量
var configPath = "/etc/config" // 未导出变量
6. 导出包初始化函数
- Go 规范上没有规定导出的初始化函数,但惯例上有时会使用特定的大写函数名来创建包的实例或配置,例如
New
、Open
、Init
,这些函数通常返回一个导出的实例(比如结构体、接口实现等)。
go
// example.go
package example
import "fmt"
// 定义一个结构体
type Config struct {
Host string
Port int
}
// 使用 New 函数来创建 Config 的实例
func New(host string, port int) *Config {
return &Config{
Host: host,
Port: port,
}
}
// 一个方法,用于打印配置
func (c *Config) Print() {
fmt.Printf("Host: %s, Port: %d\n", c.Host, c.Port)
}
- 使example包:
go
// main.go
package main
import (
"example"
)
func main() {
// 使用 New 函数创建 Config 实例
config := example.New("localhost", 8080)
// 调用 Print 方法
config.Print()
}