import中的_""怎么破

williamzhang · 2015-09-24 01:17:14 · 2342 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2015-09-24 01:17:14 的主题,其中的信息可能已经有所发展或是发生改变。

在beego的框架中,看见了如下的代码:

import (
    _ "quickstart/routers"
    "github.com/astaxie/beego"
)

不懂在“quickstart/routers”前加上_是什么意思?语法上做什么解释呢?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2342 次点击  
加入收藏 微博
7 回复  |  直到 2015-09-29 02:31:45
polaris
polaris · #1 · 10年之前

只要 quickstart/routers 的副作用,也就是执行该包的 init 方法,但本包并不需要引用 routers 的东西

atena
atena · #2 · 10年之前

前面加""是占位符的意思,如果前面不加""的话,代码中一定要调用routers包里面的东西,否则的话,编译会出错。

_ "quickstart/routers"  这句话的真实意思是本代码中,不引用routers包里面的东西,但是会调用routers包里面的init方法,也就是说,这句话就是隐含的调用一下routers中的init方法

williamzhang
williamzhang · #3 · 10年之前
atenaatena #2 回复

前面加"_"是占位符的意思,如果前面不加"_"的话,代码中一定要调用routers包里面的东西,否则的话,编译会出错。 _ "quickstart/routers"  这句话的真实意思是本代码中,不引用routers包里面的东西,但是会调用routers包里面的init方法,也就是说,这句话就是隐含的调用一下routers中的init方法

那这个init方法什么时候调用呢?main()之前?

ckrissun
ckrissun · #4 · 10年之前
williamzhangwilliamzhang #3 回复

#2楼 @atena 那这个init方法什么时候调用呢?main()之前?

import 包的时候 调用,全局变量也是

Hjack
Hjack · #5 · 10年之前

四楼说的对@ckrissun,四楼基础扎实啊!

williamzhang
williamzhang · #6 · 10年之前
ckrissunckrissun #4 回复

#3楼 @williamzhang import 包的时候 调用,全局变量也是

这点还是没想通,对编译器来说,import是静态的还是动态的?如果import类似include,是静态预处理时展开,那么顶多就是定义了init函数,但main里面没有调用啊;如果import是动态的,它需要做什么呢?

atena
atena · #7 · 10年之前
williamzhangwilliamzhang #3 回复

#2楼 @atena 那这个init方法什么时候调用呢?main()之前?

建议看下这篇文章,讲的很清楚,而且有图 http://blog.csdn.net/rznice/article/details/18987047

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传