使用gofmt重构工具重命名全局变量

时间:2014-02-11 14:52:33

标签: go refactoring

我正在试验基于此重构blog post代码的gofmt工具功能,我有一个简单的例子:

package main

import (
    "fmt"
)

var v = 12

func main() {
    fmt.Println(v)
}

我正在尝试重命名 v变量到m应用此配方:

gofmt -r 'v -> m' -w main.go

重构后的代码看起来(破碎)如:

package m

import (
    "fmt"
)

var m = m

func m() {
    m
}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:16)

您正在尝试的内容存在问题,gofmt manual states

  

使用-r标志指定的重写规则必须是以下形式的字符串:

     

pattern -> replacement

     

模式和替换都必须是有效的Go表达式。在模式中,单字符小写>标识符用作匹配任意子表达式的通配符;这些表达式将替换替换中的相同标识符。

(突出显示已添加)

如果您有var vee = 12并使用-r vee -> foo,一切都会好的。但是v -> mv -> m匹配每个Go表达式,将其标识为v并将其替换为m