golang入门-- import包与包内init方法的执行时机
来源:互联网 发布:php 正则获取手机号码 编辑:程序博客网 时间:2024/05/28 15:04
最近在学习revel(golang web开发框架) ,了解到revel管理和加载所有controller的方式。其中涉及的golang基础知识是import包。下面我们先来看看golang imort包的几种方法和特征:
第一种方式相对路径
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函数。
- golang入门-- import包与包内init方法的执行时机
- golang import自定义包
- Golang- import 导入包的语法
- Golang import 导入包的语法
- Golang- import 导入包的语法
- Golang- import 导入包的语法
- Golang学习import 导入包的语法
- golang 包中的init调用
- Golang context包入门
- Golang- import 导入包的语法(转载)
- golang strings包方法
- Golang import 包问题相关详解
- Golang import、init()、main()
- eclipse安装一个新的Python开发包后,import后不能使用包内的方法
- golang基础-生成_拷贝exe文件、多包管理、init函数及其执行顺序
- 包与import
- 存在的包出现方法不对,import包名冲突
- import 用法与包的导入
- 判断二叉树是否相等
- VMware虚拟机下CentOS无法上网解决方法
- 【网虫】DNS,Host和VPN三者到底是什么关系?
- 关于NC6.X企业报表取不了数的问题及其解决方法。
- Cocos2d-JS 加速度计与加速度事件
- golang入门-- import包与包内init方法的执行时机
- HDOJ 1059 && POJ 1014 Dividing
- http://www.cnblogs.com/xiaoluo501395377/p/3430542.html
- 安卓系统给手机设置代理
- const char* 转换到 char*
- Ionic环境配置问题记录
- java.lang.ClassNotFoundException: Didn't find class "com.example.b.MainActivity
- android 容器还没初始化完毕加载数据没显示
- App架构设计经验谈:接口的设计