一、概念
包:是多个go文件得集合,多个文件得首行声明得包名一致,他们就属于同一个包。
注意:
1.同包名得go文件必须放在一个文件夹下。不能放在不同得文件夹下。
2.包名可以和文件夹名不一样,包名不能包含 - 符号。
3.包名和文件名尽量保持一致,因为vscode下包名和文件名不一致总是有限制,在linux服务器下不一致完全没有问题
4.go文件中的函数的"首字母"必须大写。在go中规定 函数要想由外部导入和使用必须大写,首字母小写只能内部使用
二、定义
在go文件中首行定义,格式如下:
package 包名
三、导入包
1.导入包
import 包名
2.别名
import 别名 "包名"
3.匿名引入
如果引入一个包的时候为其设置了一个特殊 _ 作为包名,那么这个包的引入方式就是称为匿名引入。一个包被匿名引入的目的主要是为了加载这个包,从而得的这个包中的资源得以初始化。被匿名引入得包中得init 函数将被执行并且仅执行一次。
格式如下:
import _ "包名"
四、go mod
1.go mod init
此命令得作用主要是:在项目下创建一个go.mod文件。此时这个项目就变成了一个模块。在导入自定义包的时候,就会以当前路径为基础进行包的导入。
2.包名和文件名同名
在linux中编写实例,vscode中总是不成功,有限制
在linxu目录结构如下:
[root@node-2 data]# tree go_project
go_project/
├── go.mod
├── main.go
└── testpackage
├── a.go
└── b.go
2.1 设置mod名称
[root@node-2 data]# cd go_project/
[root@node-2 go_project]# go mod init hellogin
[root@node-2 go_project]# cat go.mod
module hellogin
go 1.20
2.2 创建自定义包
[root@node-2 go_project]# mkdir testpackage/
[root@node-2 go_project]# cd testpackage
[root@node-2 testpackage]# cat a.go
package testpackage
import "fmt"
func T1(){
fmt.Println("T1111")
}
[root@node-2 testpackage]# cat b.go
package testpackage
import "fmt"
func T2(){
fmt.Println("T222222")
}
3.3 main.go导入自定义包
[root@node-2 go_project]# cat main.go
package main
//hellogin为模块名,也就是go mod init设置的
//testpackage是文件夹名称
import "hellogin/testpackage"
func main(){
//这里的testpackage才是包名
testpackage.T1()
testpackage.T2()
}
运行结果如下:
[root@node-2 go_project]# go run main.go
T1111
T222222
3.包名和文件名不同
3.1设置mod名称
mod名称不变 和上边保持一致
3.2 创建自定义包
目录名称不变,包名变成summer
[root@node-2 testpackage]# cat a.go
package summer
import "fmt"
func T1(){
fmt.Println("T1111")
}
[root@node-2 testpackage]# cat b.go
package summer
import "fmt"
func T2(){
fmt.Println("T222222")
}
3.3 main.go导入自定义包
package main
import "hellogin/testpackage"
func main(){
summer.T1()
summer.T2()
}