一、main函数和init函数
Go语言中有两个保留函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数主要有一下特点:
- 这两个函数在定义时不能有任何的参数和返回值。虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说都不合适,强烈建议开发者在一个package中每个文件只写一个init函数。
- Go 程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package main就必须包含一个main函数。
- 程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
main函数引入包初始化流程图
二、import
我们在写 Go 代码的时候经常用到 import 这个命令用来导入包文件,而我们经常看到的方式参考如下:
import{ "fmt"}
然后我们代码里面可以通过如下的方式调用:
fmt.Println("hello world")
上面这个 fmt 是 Go 语言的标准库,其实是去 goroot 下去加载该模块,当然 Go 的 import 还支持如下两种方式来加载自己写的模块:
1. 相对路径
// 当前文件同一目录的 model 目录,但是不建议这种方式来 importimport “./model”
2. 绝对路径
// 加载 gopath/src/shorturl/model 模块import “shorturl/model”
上面展示了一些 import 常用的几种方式,但是还有一些特殊的 import ,让很多新手很费解,下面我们来讲解一下到底是怎么一回事:
1. 点操作
我们有时候会看到如下的方式导入包
import( . "fmt")
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的 fmt.Println("hello world") 可以省略的写成 Println("hello world")
2. 别名操作
别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字
import( f "fmt")
别名操作的话调用包函数时前缀变成了我们的前缀,即 fmt.Println("hello world")可以写成 f.Println("hello world")
3. _ 操作
这个操作经常是让很多人费解的一个操作符,请看下面这个 import
import ("database/sql"_ "github.com/ziutek/mymysql/godrv")
_ 操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的 init 函数。
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论