adwin's blog
GO语言的坑之包名与变量名的冲突
post by:adwin 2016-2-20 18:35

GO好久没用了,都忘得差不多了,前两天和基友突然想要写个获取和发送斗鱼弹幕的东西,所以就想要用GO实现一下,在这实现的过程中遇到了一个GOlang的坑,因此也耽搁了不少时间,以前从没遇到也没想过过会出现这种情况,自己也觉得很不可思议,所以这里记一下。

环境:Windows10 x64

GO版本:go version go1.5.3 windows/amd64

IDE:LiteIDE x28

 

其实很简单,就是变量名不能和包名一样,也就是说,假如前边import了url这个包以后,那么你的程序里(起码在这个文件里)就不能再出现url这个变量了,当然其实你定义一个url变量也不会报错,但是你会发现url包里的所有函数都不能用了。。。假如你用url.QueryUnescape(str)这个函数话首先会提示你url这个包引用过来但是没有使用(GO的特性),另外还会提示你这里有语法错误……而IDE并不会报错(语法上是正确的),只有在编译的时候才会报这个错误。值得一提的是,代码提示也会跟着GO一起变得傻比了。。。

那解决办法要么别起和包名一样的变量名,要么就是给包一个别名?反正我是给变量换了一个名字。

其实我觉得这个可以算是BUG了吧?像url这种词在变量名中应该是很常用的吧,然而当你用到url这个包的时候就不能用这个变量名,我靠这是什么鬼逻辑?大大降低用户体验啊,有空可以给GO官方提一下能不能处理一下。不过我觉得提了也是白扯,我就不信只有我遇到这种问题。

其实后来发现不光这一点,还有类型名称和变量名也不能重复。。。肯定还会有其他不能重复和冲突的地方,但是以上两个是我已经遇到的。。。

评论:
新一
2016-03-12 20:07 回复
这个深坑,真的是没有注意到,觉得是GO的bug
adwin
2016-03-13 16:56 回复
@新一:BUG算不上,当然如果能解决就更好了。
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容