Golang 教程09 - package Scope
1. package Scope
1.1 如何理解package Scope?
在Go语言的世界里,包就像一个大家庭,每个包都有自己的“家长”——包作用域。 包作用域规定了哪些成员可以在家庭里自由活动,哪些成员只能待在自己的房间里。
想象一下,包就像一个热闹的菜市场:
- 每个摊位就是一个包,里面摆满了各种各样的商品,也就是变量、函数、类型等成员。
顾客可以自由地在菜市场里逛,挑选自己需要的商品。 - 但是,每个摊位都有自己的“地盘”,顾客不能随便进入摊位后面的小房间,因为那里存
- 放着摊主的私人物品,也就是私有成员。
包作用域就像菜市场里的“地盘”:
- 公有成员就像摆在摊位上的商品,所有顾客都可以自由购买。
- 私有成员就像藏在小房间里的私人物品,只有摊主自己才能使用。
1.2 示例
Example1: 公有成员
package main
import "fmt"
var name string = "小叮当" // 公有变量
func sayHello() {
fmt.Println("Hello,", name) // 可以访问公有变量
}
func main() {
sayHello()
}
Output:
Hello, 小叮当
解析:
- name 是一个公有变量,在同一个包内的所有函数都可以访问它。
- 函数 sayHello() 可以访问 name 变量,因为它们都在同一个包内。
Example 2:私有成员
package main
import "fmt"
type Person struct {
name string // 私有成员
age int
}
func (p Person) sayHello() {
fmt.Println("Hello, 我的名字是", p.name) // 可以访问私有成员
}
func main() {
p := Person{name: "小叮当", age: 10}
//p.name = "Go" // 无法访问私有成员
p.sayHello()
}
Output:
Hello, 我的名字是小叮当
解析:
- name 是 Person 类型的一个私有成员,只有 Person 类型的方法才能访问它。
- 函数 sayHello() 是 Person 类型的方法,它可以访问 name 变量。
- 在 main() 函数中,无法直接访问 p.name 变量,因为它是一个私有成员。
1.3 总结
- 包作用域是 Go语言中一个重要的概念,它可以帮助我们更好地组织代码。
- 公有成员可以让其他包的代码访问,而私有成员只能在本包内使用。
- 理解包作用域可以帮助我们避免代码冲突和错误。
不追求山顶的景色,享受攀登的过程,让我们期待下面学习。