我的gofmt是错误地工作还是我不明白?

And*_*y D 2 go gofmt

我想我的gofmt作品不是它应该如何,我是对的吗?

原始档案:

package main


import "fmt"


func main() {
    fmt.Printf("hello, world\n")
}
Run Code Online (Sandbox Code Playgroud)

然后我做了:

gofmt -r 'h -> H' -w "hello.go"
Run Code Online (Sandbox Code Playgroud)

文件内容:

package H


import "fmt"


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

Sto*_*ica 5

大概gofmt是作者的作品,可能与你的预期不同.该文件说:

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

由于模式中只有一个小写字母,因此它匹配所有子表达式.然后替换它们H.让我们进一步举例,考虑一下:

package main

import "fmt"

func compare(a, b int) {
    if a + b < a * b {
        fmt.Printf("hello, world\n")
    }
}
Run Code Online (Sandbox Code Playgroud)

在相同的gofmt命令之后,上面的代码变为:

package H

import "fmt"

func H(H, H H) {
    if H+H < H*H {
        H
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这不是您想要的,那么您应该使用更具体的模式表达式.