导出名称与未导出名称
本课属于 Coddy GO 学习旅程的“面向对象编程”单元。第 4 课,共 107 课。
在 Go 中,名称的首字母决定了它的可见性。以大写字母开头的名称是导出的(可从其他包访问)。以小写字母开头的名称是未导出的(仅在该包内可访问)。
导出名称:在包外可见
type User struct {
Name string // 导出的字段
Email string // 导出的字段
}
func CreateUser(name string) User { // 导出的函数
return User{Name: name}
}未导出的名称:仅在包内可见
type secret struct { // 未导出的结构体
password string // 未导出的字段
}
func validate() bool { // 未导出的函数
return true
}混合:包含一些未导出字段的导出结构体
type Account struct {
Username string // 已导出,可在任何地方访问
Email string // 已导出,可在任何地方访问
password string // 未导出,只能在包内访问
}这种命名约定取代了其他语言中的 public 和 private 等访问修饰符。
// 大写字母 = 可导出(公开)
// 小写字母 = 不可导出(私有)
func SaveData() {} // 可导出
func loadData() {} // 不可导出在 Go 中,遵循这一约定至关重要。其他包导入你的代码时,只能访问以大写字母开头的名称。
挑战
中等将 product.go 中的所有名称改为符合 Go 的导出命名约定。将以下名称的首字母大写:
- 结构体名称:
product→Product - 所有字段名称:
name、price、stock - 所有函数名称:
totalValue、displayInfo - 函数中的所有字段引用
亲手试试
package main
import "fmt"
func main() {
var name string
var price float64
var stock int
fmt.Scan(&name, &price, &stock)
p := Product{
Name: name,
Price: price,
Stock: stock,
}
fmt.Println(DisplayInfo(p))
fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: Go 在线编译器