Go中的包

204 阅读3分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

Go中标识符的可见性

Go中所有的包名都必须是小写的

如果一个标识符首字母小写, 则只能在包内的多个文件中使用, 对于整个包的内部是可见的

如果首字母大写, 则可以在其它的包中使用这个标识符, 对于包外也是可见的

Go中的包

在Go语言中使用package(包)来进行源文件和代码的管理. 一般都是将同一个模块或同一个功能下的代码放到同一个包中.

例如Go内置的包

 // 用来存放一些基本的数据类型和一些初始仳的函数
 package builtin

同一个包下可以有多个源文件, 并且同包下的源文件是可以互相使用变量和函数的.

因此同一个包下的标识符不能有重名的, 否则会报编译错误.

但是不同的包中, 标识符的名字是可以重名的

导入包的方式

第一种

 import "fmt"
 import "math"

第二种

 import (
   "fmt"
   "math"
 )

第三种 给包起个别名

当我们使用包时的函数和变量的时候问题要带上包名

如果我们像上面那种引入包的方式的话, 要像下面这样使用

 math.Sqrt(9)

我们可以给包起一个别名来简化代码的编写

 import (
   m "math"
   f "fmt"
 )

这样我们就可以使用简化后的包名来调用相应函数和变量

 f.Println(m.Sqrt(9))

第四种 省略包名, 直接使用内部的函数和变量

 import (
   . "math"
   f "fmt"
 )

这样我们可以直接使用对应包下的函数了

 f.Println(Sqrt(9))

第五种

当不再使用某个包里的函数或变量时, 如果不去掉这个包的引入, 编译器会报错

我们可以使用_来忽略这个包, 一般用在导入驱动包时使用

import (
	_ "github.com/go-sql-driver/mysql"
)

第六种 手动导入外部包

先在终端中, 将第三方包下载下来

在终端中输入以下命名: go get -u github.com/gin-gonic/gin 来下载一个Web框架包

然后在源文件中使用import进行导入

import (
	"github.com/gin-gonic/gin"
)

第七种 自动导入外部包

我们可以在当前项目目录对应的终端中输入go mod init来创建一个go.mod文件

然后引入要导入的第三包的地址

最后在终端中执行命令: go mod tidy 来从网络上将包下载下载并导入

Go中的init函数

Go中的init函数是用于初始化包里的一些内容的

不能被其它函数调用, 只能程序自己调用

每个源文件中可以有多个init函数

当源文件中有多个init函数时, 它们的执行顺序是定义顺序来决定

因此每个包有也会出现多个init函数

当包中有多个init函数时, 它们的执行顺序是不固定的