包:
包其实就是文件夹,go的源文件就是文件,把所有的文件分类放到不同的包利于管理。
作用:
- 如果把所有的代码都放在一个文件中,后续的可维护性、阅读性都比较差。所以可以使用包的来区分不同的模块/功能分别放在不同包中。然后其它的文件使用到功能就调用就可以了。
- 在同一个包下是函数和全局变量(局部变量可以)是不能重名的,但是不同包就可以。
- 如果是不想被调用包下的函数(私有)可以以小写字母开头命名函数,如果是想调用其它包的函数,被调用的函数必须是大写字母开头的。
声明:
包的声明不是你的包叫什么,你就可以用这个名字调用,而是代码最上面的package决定的
例:创建2个包分别是main、bao
- main包下有main.go
- bao下有bao.go
- 使用main去调用bao.go时,一定要把bao.go中的package后面的名字换成bao
import函数名首字母必须是大写的
package bao // 打包:package后面的名称就是以后这个文件要被调用的名称,这里要和文件名保持一致,比如这个文件是bao.go,那这里也叫bao
import "fmt" // 这里是引入文件所在包的路径
func Get() {
fmt.Println("Get 函数被调用")
}
调用:
package main // main包
import "go_basics/bao" // 这里是引入文件所在包的路径
func main() {
bao.Get()
}
多个包调用:
package main
import "go_basics/bao" // 方式1是逐个管理
import ( // 方式2是统一管理
"fmt"
"go_basics/bao"
)
简化版调用:
package main
import (
."fmt" // 使用点调用,下面就不需要再写fmt了
"fmt" // 不使用点调用,就必须是【包名.函数】才能使用
)
func main() {
Println() // 使用点调用
fmt.Println() // 不使用点调用
}
取别名方式调用:
如果包名比较长,为了简化,就可以用这种方式了,但是后续必须用别名调用内部的函数和变量
package main
import alias "go_basics/bao" // 这里我把上面的bao名称使用别名alias代替了,下面调用的时候就可以直接用alias.Get方法了,不能再用bao.Get了
func main() {
alias.Get()
}
包引用后不适用会报错,可以使用占位符忽略报错信息
package main
import (
_ "fmt" // 加上下划线就可以忽略报错了,就是引入了包没有调用其中的函数,仅会执行包下的init函数
)
func main() {}