import(
_ "BeegoDemo/routers"
"github.com/astaxie/beego"
)
func main(){
beego.Run()
}
首先看到import导入了两个包,而有个包前面有一个"_",这表明是引入rounters包,并执行init()方法。这里设计一个知识点,就是Go语言的执行过程
Go里面有两个保留的函数:init函数和main函数。下边就来比较一下两个函数的异同。
相同点:两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:init可以应用于任意包中,且可以重复定义多个。main函数只能用于main包中,且只能定义一个。
下边说一下两个函数的执行顺序:
对同一个go文件的init()调用顺序是从上到下的
对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数,对于
对不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init()
如果package存在依赖,则先调用最早被依赖的package中的init()
最后调用main函数
import 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。
go中import用于导入包。导入之后就可以使用包中的代码。
比如:
import(
"fmt"
)
在代码中就可以使用fmt包中的方法,如:
fmt.Println("hello world")
1、使用点操作引入包时,可以省略包前缀:
import(
. "fmt"
)
注意上面 fmt前多了 . 字符。代码中使用时:
Println("hello world")
前缀fmt就不需要了。
2、别名操作可以给包起个小名儿。如:
import(
f "fmt"
)
f.Println("hello world")
3、操作
由于go在引入包时调用包的init方法。所以使用操作,主要是为了使用包的init函数,一般用在数据库方面的包中:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
这个可以避免go编译时提示引入了包但未使用。