包的可见性
在Go语言中,包中的变量、函数、结构体类型等可以分为两类:可导出(Exported)和不可导出(Unexported)。可导出的标识符(如函数、类型或变量)的名称以大写字母开头,不可导出的则以小写字母开头。只有可导出的标识符可以被其他包中的代码访问和使用,而不可导出的标识符只能在同一包内部使用。
例如,在下面的代码中,我们定义了一个可导出的类型Person
和一个不可导出的函数printPerson
::
package myPackage
import "fmt"
type Person struct {
Name string
Age int
}
func NewPerson(name string, age int) *Person {
return &Person{name, age}
}
func (p *Person) SayHello() {
fmt.Printf("Hello, my name is %s, I'm %d years old.n", p.Name, p.Age)
}
func printPerson(p *Person) {
fmt.Printf("Name: %s, Age: %dn", p.Name, p.Age)
}
在上面的代码中,我们定义了一个可导出的类型Person
和一个不可导出的函数printPerson
。Person
类型包含了一个名为Name
的字符串和一个名为Age
的整数。我们还定义了一个NewPerson
函数来创建Person
类型的实例,以及一个SayHello
方法来打印出一个人的问候语。printPerson
函数是一个不可导出的函数,只能在myPackage
包内部使用。
在其他的源代码文件中,如果需要使用myPackage
中的类型或函数,需要先将其导入到当前的源代码文件中:
package main
import "myPackage"
func main() {
p := myPackage.NewPerson("Alice", 25)
p.SayHello()
}
在上面的代码中,我们在main
函数中创建了一个名为p
的Person
类型的实例,并通过调用其SayHello
方法来打印问候语。在创建实例时,我们使用了myPackage
中的NewPerson
函数来创建一个新的Person
类型的实例。