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

tar*_*lah 11 refactoring go

我正在尝试gofmt重构的工具功能基于这篇博文的代码,我有这个简单的例子:

package main

import (
    "fmt"
)

var v = 12

func main() {
    fmt.Println(v)
}
Run Code Online (Sandbox Code Playgroud)

我试图重新命名v变量来m应用这个食谱:

gofmt -r 'v -> m' -w main.go
Run Code Online (Sandbox Code Playgroud)

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

package m

import (
    "fmt"
)

var m = m

func m() {
    m
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

nem*_*emo 16

gofmt手册指出,你正在尝试的是一个问题:

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

pattern -> replacement

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

(突出显示已添加)

如果你有var vee = 12和使用-r vee -> foo一切都会好的.随着v -> m然而, v -> m每一个去表达相匹配,其标识为v和替换它m.

  • @Matt 直接来自文档的示例:`(a) -> a` 删除表达式周围不必要的括号。 (2认同)