包是golang的一种源码组织方式,一个以.go结尾的源码文件仅能归属于一个包。包可以看做一个类库或者命名空间,当在一个 .go 文件里导入一个包后,就可以使用该包里面的常量、变量、类型、函数名、结构字段等等。
目录结构:
apps/
src/
helloworld/
hello.go
init/
hello.go
firstApp.go
bin/
pkg/
- helloworld/hello.go
// hello.go
package nihao
import "fmt"
func Shout() {
fmt.Println("Hello, what's your name?")
}
func main() string {
return "this is a function named 'main' in nihao package"
}
- init/hello.go
// hello.go
package main
func sing() string {
return "Jingle bell, jingle bell, jingle all the way!"
}
- init/firstApp.go
//firstApp.go
package main
import (
"fmt"
"learning/helloworld"
)
func main() {
fmt.Println(test())
nihao.Shout()
}
包名和路径的关系
- 从helloworld/hello.go的源码中看出,包名和最后一个路径名可以不一致。
- 编译后的可执行文件是以最后路径名而命名的。
- 从init/firstApp.go的源码中看出,在import引用包名时,是以路径名引用的,但调用时是以包名来调用的。
main包
- 如果源码文件属于main包,那么这些源码文件时属于一个可执行文件的源码文件,否则就属于函数包。
- main包中必须有main函数,因为可执行程序总是从main包中的main函数开始执行。
如helloworld/hello.go源码中。这里的main函数虽然也是main,但是就只是nihao包中的一个普通函数了。由于main是小写,这个函数只能在nihao包中被调用。
包函数名称大小写的区别
- 当一个包中的函数允许其他包可以调用时,需要把名称命名为首字母大写,相当于给这个函数赋予了类中的public属性。
如果是小写名称,那么这个函数只在该包内可见(可调用),其他包无法调用。这相当于给这个函数赋予了类中的private属性。
强调一下,go语言没有类和继承的概念
有疑问加站长微信联系(非本文作者)