golang入门-- import包与包内init方法的执行时机
2016-04-20 11:21
260 查看
最近在学习revel(golang web开发框架) ,了解到revel管理和加载所有controller的方式。其中涉及的golang基础知识是import包。下面我们先来看看golang imort包的几种方法和特征:第一种方式相对路径
始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。此外需了解别名操作方式导入包也会执行init函数。
import "./module" //当前文件同一目录的module目录, 此方式没什么用容易出错</span>第二种方式绝对路径import “LearnGo/init” //加载gopath/src/LearnGo/init模块下面展示一些特殊的import方式1.点操作我们有时候会看到如下的方式导入包
import( . “fmt” )这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的
fmt.Println("hello world")可以省略的写成
Println("hello world")2.别名操作别名操作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字,revel框架的app/controllers/tmp/main.go(框架的启动入口)里可以看到此方式的应用。
import( f "fmt" )别名操作的话调用包函数时前缀变成了我们的前缀,即
f.Println("hello world")。
import (//revel框架的代码片段 "flag" "reflect" "github.com/revel/revel" controllers0 "github.com/revel/modules/static/app/controllers" _ "github.com/revel/modules/testrunner/app" controllers1 "github.com/revel/modules/testrunner/app/controllers" _ "guild_website/app" controllers "guild_website/app/controllers" tests "guild_website/tests" "github.com/revel/revel/testing" )3._操作这个操作经常是让很多人费解的一个操作符,请看下面这个import
import (//revel框架的代码片段 _ "github.com/revel/modules/testrunner/app" _ "guild_website/app" )_操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数,要理解这个问题,需要看下面这个图,理解包是怎么按照顺序加载的:程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它 只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先 将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开
始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。此外需了解别名操作方式导入包也会执行init函数。
相关文章推荐
- django的session保存策略(时间)
- Google Cardboard 虚拟现实眼镜开发初步(一)
- 当你在浏览器中输入Google.com并且按下回车之后发生了什么
- 在Windows下使用Django创建第一个项目
- 记一次Golang routine卡死
- Google Guava 库用法整理
- Django之便签生成
- Django之通过tag推荐文章
- BAPI for goods receipt for subcontracting PO
- Django之tag的使用
- Google推荐的图片加载库Glide介绍
- Django初学笔记1.
- [HDU 5512][2015ACM/ICPC亚洲区沈阳站] Pagodas 博弈论
- BZOJ 4510|USACO 2016 Jan Gold|Ratio Contact|动态规划
- Fibonacci 矩阵快速幂
- Django 异常解决
- Django初识
- google hash table ------稀疏hash表之sparse hashtable
- django 链接地址匹配流程
- 在浏览器中输入Google.com并且按下回车之后发生了什么?