gofmt重写规则可以删除多余的参数类型吗?

And*_*lay 5 go

如果您有以下代码: func MyFunc(a int, b int)

gofmt重写规则可以将其更改为: func MyFunc(a, b int)

我试过了: gofmt -r "f(x t, y t) -> f(x, y t)" myfile.go

但我得到: parsing pattern f(x t, y t) at 1:5: expected ')', found 'IDENT' t

我也尝试过: gofmt -r "f(x int, y int) -> f(x, y int)" myfile.go

但它为int而不是t提供了类似的错误

我已经阅读了gofmt文档.网络搜索没有任何帮助.

我故意使用单个字符标识符来匹配表达式.

我怀疑问题可能在于尝试匹配类型,因为它可能不被视为"表达"

是否可以使用gofmt执行此操作?

小智 3

不,这是不可能的 - 因为 go fmt 将 patter 视为“表达式”,看看http://golang.org/src/cmd/gofmt/rewrite.go parseExpr() 函数。

围棋规范( http://golang.org/ref/spec#Expressions)清楚地说明了“表达式通过将运算符和函数应用于操作数来指定值的计算”。所以 go fmt 尝试将模式“f(xt, yt)”解析为函数调用,因此它需要逗号或括号而不是“t”。

你不能写出“func MyFunc(a int, b int)”的模式 - 因为它的函数定义,不是一个有效的 go 表达式