【问题标题】:Does my gofmt work wrongly or I don't understand something?我的 gofmt 工作错误还是我不明白什么?
【发布时间】:2017-02-05 06:40:43
【问题描述】:

我想我的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
}

【问题讨论】:

    标签: go gofmt


    【解决方案1】:

    大概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
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2016-04-20
      • 2020-04-20
      相关资源
      最近更新 更多