go语言init和main函数

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编译时提示引入了包但未使用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package ...
    副班长国伟阅读 465评论 0 2
  • 函数 Go语言函数格式func 函数名称(形参列表)(返回值列表){函数语句} Go语言函数的类型没有返回值没有形...
    喝酸奶要舔盖__阅读 406评论 0 0
  • 转自:https://blog.csdn.net/rznice/article/details/18987047G...
    古则阅读 417评论 0 0
  • main函数 Go语言程序的默认入口函数(主函数):func main()函数体用{}一对括号包裹。只能应用于pa...
    weifansym阅读 1,524评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,095评论 2 7