一、前言
文件的结构如下:
c
.
├── go.mod
├── main
│ └── main.go
└── util
└── util.go
文件在调用其它包的时候,需要在代码中引用其他的函数,包的命名一般都以小写为主,文件中函数的以首字符为大写的函数为共有函数,小写的为私有函数,只能是在同一个包中来回调用,公有函数可直接被其他包调用。
二、前提知识点
- 首字符大写的函数为共有,否则为私有
- 在
import
导入其他包的时候组合方式为"模块名字/子路径 ",其中每个子路径中都是一个包,例如"test/util" test为go.mod文件中的模块名,util是该模块下的子文件夹,注意是子文件夹,不是子包的名称,子文件夹的名称可以和包名不同,例子中util
文件夹下的包名为utils
,在main.go
中导入在子包的路径后,即可引用该包的函数。 - 执行
go run ./main
即可,默认会在main
的文件夹中搜索执行main()
函数
其中 go.mod
c
1 module test
2
3 go 1.21.0
其中main.go
c
1 package main
2
3 import (
4 "fmt"
5 "test/util"
6 )
7
8
9 func main() {
10 a := utils.Add(1, 3)
11 fmt.Println(a)
12 }
util.go
c
1 // util.go
2 package utils
3
4 func Add(a int, b int) int {
5 return a + b
6 }
执行
c
┌─[zhaoky@zhaoky]─[~/Desktop/kaiyue/module]
└──╼ $go run ./main
4
三、init()函数
在以上的例子修改util.go文件:
c
1 // util.go
2 package utils
3
4 import "fmt"
5
6 func Add(a int, b int) int {
7 return a + b
8 }
9
10 func init(){
11 fmt.Println("hahahah")
12 }
c
此时执行main.go
└──╼ $go run ./main
hahahah
4
其中init()函数会在main()函数中使用import调用"test/util" 时候会顺序执行。
四、别名
1、调用的包起别名
c
1 package main
2
3 import (
4 "fmt"
5 lala "test/util"
6 )
7
8
9 func main() {
10 a := lala.Add(1, 3)
11 fmt.Println(a)
12 }
在main.go
文件中给路径test/util
下的utils
的包重新别名为lala
2、给未调用的包起别名
c
1 package main
2
3 import (
4 "fmt"
5 _ "test/util"
6 )
7
8
9 func main() {
10 fmt.Println(1)
11 }
注意 :在没有调用该包的函数时,如果import
中引用了,此时会报错,如果起别名为_
则不会报错,但不会影响utils包中的init()的函数执行。
c
┌─[zhaoky@zhaoky]─[~/Desktop/kaiyue/module]
└──╼ $go run ./main
hahahah
1