首先介绍一下 godef 这个插件,用它可以实现 go 语言的 go to definiation 功能,就像用 IDE 时按住 ctrl 用鼠标一点方法名就能跳转到方法一样,不论写代码还是看代码这个功能都太重要了。但是在使用时,发现只有第一次打开编辑器时可以使用(在方法上点 ctrl+i 跳转),再用就没反应了,还好 Atom 提供了控制台,调试时发现使用插件时会提示 "godef not find",在插件的代码中找到了这段代码,如下:
..... godef: (file, offset, position) -> @gopath = process.env.GOPATH found = false if @gopath and not @godefpath? for p in @gopath.split(':') @godefpath = path.join(p, 'bin', 'godef') exists = fs.existsSync(@godefpath) if exists found = true break else continue if not found console.log "godef not find." return args = [ @godefpath '-f' file '-o' offset ] ......
虽然根本都看不懂这到底是什么语法,但是逻辑上还是能看得懂的,问题就出现在 found 变量上,这个局部变量被定义为 false ,每次方法执行时,都会被定义成 false,
但是 if @gopath and not @godefpath? 就只执行一次(debug时验证的),
所以下面的 if not found 在第二次执行此方法后,就永远只能 console.log "godef not find." 并 return 了;
说了一大堆废话,其实就是把下面这三行删了就ok了
if not found console.log "godef not find." return
很久不来 iteye 写博客了,因为太忙,而且也没什么可写的,很多博文都被copy了无数次,遇到问题了就直接 google 出来了,但是这个小问题还真是没google到,可能是这个插件用的人太少了,但是它真的非常有用。
本来写到 ethfans 上了,但感觉这个问题更应该是一个 技术问题,并不是以太坊的问题,还是挪到这里来跟大家分享吧;
希望这个小小的发现能对使用 atom 来看 go 代码的同学提供一点点帮助。