发布于 

Golang中package/import的使用

最近入坑了Golang对package的使用很是疑惑,在网上看到了一个很好的文章解释。刚刚看完我记录一下以免忘记。

首先我们用go mod来创建一个项目,具体怎么创建我就不写了(毕竟本篇内容不是介绍go mod的)。项目树状图如下:

1
2
3
4
5
├ Project            项目文件
| go.mod
| main.go
| ├ pake 存放包用的目录
| | Hello.go 自定义的包

Package的使用

在一个go的项目中一般需要一个main包,并且这个main包只能有一个。而我们想调用别的go文件中的代码就需要使用到包(package)这个东西。如果你学过C语言的话你可以理解为用户自定义的库文件,我们可以直接调用。而go语言的一个包的代码都应该写在一个目录下,且一个包中可以有多个文件。

我们来定义一个自定义的包叫Hello.go存放在工程目录的pake文件夹下,源码如下:

1
2
3
4
5
6
7
8
9
10
11
package pake

import "fmt"

func init(){
fmt.Println("Hello world!")
}

func Hello() string {
return "hello"
}

在我们自定义的包中,package后所跟的应为包所处文件夹的名称,比如这个Hello.go是包含在pake这个文件夹中,所以我们package后跟pake

import的使用

最后我们写一个main包来调用这个包。源码如下:

1
2
3
4
5
6
7
8
9
10
package pake

import
"fmt"
"Project/pake"


func main(){
fmt.Println(pake.Hello())
}

go mod定义的项目导入包,写从工程文件夹到包所处的文件夹的路径即可,比如我们的Hello这个包就在工程文件夹Project的pake文件夹中,所以我们写做Project/pake

跑了一下程序成功输出了Hello world!说明成功的导入了。

然而导入的操作还不止这一种操作,以下我们来说一下几种其他的操作:

定义别名

1
2
3
4
5
6
7
8
9
10
package pake

import
"fmt"
myPake "Project/pake"


func main(){
fmt.Println(myPake.Hello())
}

这种导入方式可以用来省懒,如果包名太长就可以自定义一下。

点导入

1
2
3
4
5
6
7
8
9
10
package pake

import
"fmt"
. "Project/pake"


func main(){
fmt.Println(Hello())
}

用.来导入的话可以直接将包中的方法注册到当前的包中,用是可以直接调用不用在前面写包名前缀

下划线引用

1
2
3
4
5
6
7
8
9
10
package pake

import
"fmt"
_ "Project/pake"


func main(){
fmt.Println(pake.Hello())
}

_ 是包引用操作,只会执行包下各模块中的 init 方法,并不会真正的导入包,所以不可以调用包内的其他方法。

所以我们这一段代码会报错!!!