go-import下划线的作用

原文:http://studygolang.com/articles/4356

----------------------------------------------------------------------------------------------------------------------

在Golang里,import的作用是导入其他package,但是今天在看beego框架时看到了import 下划线,不知其意,故百度而解之。

  import 下划线(如:import _ hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。

【示例】
 目录结构:
 GOPATH
      --bin
      --pkg
      --src
            main.go
          --hello
                --imp
                       init.go

main.go

1 package main
2
3 import _ "hello/imp"
4
5 func main() {
6     // imp.Print() 编译报错,说:undefined: imp
7 }

输出结果:imp-init() come here.
 1 package imp
 2
 3 import "fmt"
 4
 5 func init() {
 6     fmt.Println("imp-init() come here.")
 7 }
 8
 9 func Print() {
10     fmt.Println("Hello!")
11 }

  至于import的点操作和别名操作还是蛮简单而且也好理解,所以不再演示了。

时间: 2024-10-30 02:11:36

go-import下划线的作用的相关文章

Python下划线的作用

1. 单前导下划线 _var 是一个Python命名约定,表示这个名称是供内部使用的. 它通常不由Python解释器强制执行,仅仅作为一种对程序员的提示. 2. 单末尾下划线 var_ 单个末尾下划线(后缀)是一个约定,用来避免与Python关键字产生命名冲突:像class或def这样的名称已经被一个关键字所占用,附加一个下划线来解决命名冲突 3. 双前导下划线 __var Python解释器自动在这种双下划线的私有方法或者私有属性的前面加上了 _类名 ,所以使用原定义的变量名和方法名访问不了变

golang import 下划线 的实现原理

这个操作经常是让很多人费解的一个操作符,请看下面这个import import ( "database/sql" _ "github.com/ziutek/mymysql/godrv" )  // _操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数, // 要理解这个问题,需要看下面这个图,理解包是怎么按照顺序加载的: 程序的初始化和执行都起始于main包.如果main包还导入了其它的包,那么就会在编译时将它们依次导入.有时一个包会被多

python——双下划线与python命名机制

python中双下划线的作用(1)所有以双下划线开头的成员是私有的(2)python对于私有变量是会进行扎压(mangling)的,扎压规则是原始定义:class A():    __function():          print '__function is private! '扎压之后:class A():    _A__function():          print '__function is private!' 同时,在class A中对于以前__function()的调用

python中的单下划线和双下划线意义和作用

Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数).例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以被访问),一般是具体实现细节的部分.单下划线常用来实现模块级私有化,当我们使用“from mymodule import *”来加载模块的时候,不会加载以单下划线开头的模块属性. 而以双下划线开头并最多以一个下划线结尾的属性(例如___spam),将会被替换成_classname__spam这样的形

SQL语句中like下划线不起作用

在用[select * from psx_element where ele_id like '%ref_%']查询是,表中出现了很多不包含[ref_]的结果. 经过一番度娘,终于了解. 因为下划线是通配符,需要用escape转义函数,写成下面的语句就可以了. select * from psx_element where ele_id like '%ref/_%' escape'/'

详解 Python 中的下划线命名规则

在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单下划线(_)会在以下3种场景中使用: 1.1 在解释器中: 在这种情况下,“_”代表交互式解释器会话中上一条执行的语句的结果.这种用法首先被标准CPython解释器采用,然后其他类型的解释器也先后采用. >>> _ Traceback (most recent call last): Fil

【转】关于python中带下划线的变量和函数 的意义

http://www.blogjava.net/lincode/archive/2011/02/02/343859.html 总结: 变量: 1.  前带_的变量:  标明是一个私有变量, 只用于标明, 外部类还是可以访问到这个变量 2.  前带两个_ ,后带两个_ 的变量:  标明是内置变量, 3.  大写加下划线的变量:  标明是 不会发生改变的全局变量 函数: 1. 前带_的变量: 标明是一个私有函数, 只用于标明, 2.  前带两个_ ,后带两个_ 的函数:  标明是特殊函数 Pytho

NSAttributedString能否设置文字下划线?是否支持line break?

#import <CoreText/CoreText.h> #import "ViewController.h" @interface ViewController () @property(nonatomic, weak) IBOutlet UILabel *label1; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional

Object-C 声明属性为什么用下划线,代码规范和编程风格

原文:http://blog.sina.com.cn/s/blog_7b9d64af0101923n.html 在阅读和书写关于iPhone编程的代码的时候,发现有很多这样的情况: 看到很多源代码里面,使用前面带下划线变量,然后在@synthesize 语句中 在用一个不带下划线的变量名. 这样做,到底有什么作用? 因为我常常是以这种方式来做的: *.h中申明变量 #import <UIKit/UIKit.h> @interface NewPlayerController : UIViewCo