我认为gofmt
的作用不是它应该如何,我是对的吗?
原始档案:
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
然后我做了:
gofmt -r 'h -> H' -w "hello.go"
以下文件的内容:
package H
import "fmt"
func H() {
H
}
答案 0 :(得分:5)
据推测,gofmt
正如其作者所预期的那样,可能与您的预期不同。
documentation说:
模式和替换都必须是有效的Go表达式。在模式中,单字符小写标识符用作匹配任意子表达式的通配符;这些表达式将替换替换中的相同标识符。
由于模式中只有一个小写字母,它匹配所有子表达式。然后用H
替换它们。让我们进一步举例,考虑一下:
package main
import "fmt"
func compare(a, b int) {
if a + b < a * b {
fmt.Printf("hello, world\n")
}
}
在相同的gofmt
命令之后,上面的代码变为:
package H
import "fmt"
func H(H, H H) {
if H+H < H*H {
H
}
}
如果这不是您想要的,那么您应该使用更具体的模式表达式。