go 使用gofmt重构工具重命名全局变量,go,go,refactoring,go,Go,Refactoring" /> go 使用gofmt重构工具重命名全局变量,go,go,refactoring,go,Go,Refactoring" />

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

go 使用gofmt重构工具重命名全局变量,go,go,refactoring,go,Go,Refactoring,我正在试验用于重构代码的gofmt工具功能,基于此,我有一个简单的例子: package main import ( "fmt" ) var v = 12 func main() { fmt.Println(v) } 我正在尝试将v变量重命名为m应用此配方: gofmt -r 'v -> m' -w main.go 重构后的代码看起来(不完整)如下: 我在这里遗漏了什么?您正在尝试的内容有一个问题,即: 使用-r标志指定的重写规则必须是以下格式的字符串: patt

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

package main

import (
    "fmt"
)

var v = 12

func main() {
    fmt.Println(v)
}
我正在尝试
v
变量重命名为
m
应用此配方:

gofmt -r 'v -> m' -w main.go
重构后的代码看起来(不完整)如下:


我在这里遗漏了什么?

您正在尝试的内容有一个问题,即:

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

pattern->replacement

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

(加亮显示)

如果您有
var-vee=12
并使用
-r-vee->foo
一切都会很好。但是,使用
v->m

v->m
匹配每个Go表达式,将其标识为
v
,并将其替换为
m

Huh。为什么使用单字符小写标识符来匹配“任意子表达式”很有用?(或者这是另一个问题…@Matt直接从doc中取了一个例子:
(a)->a
,删除表达式周围不必要的括号。啊,我明白了。因此,它不仅可以用于重构变量,还可以用于清理语法。谢谢
package m

import (
    "fmt"
)

var m = m

func m() {
    m
}