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

时间:2014-04-04 17:14:38

标签: 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 documentation。网络搜索没有任何帮助。

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

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

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

1 个答案:

答案 0 :(得分:3)

不,它不可能 - 因为fmt将模式视为" Expression",请查看http://golang.org/src/cmd/gofmt/rewrite.go parseExpr()函数。

转到规范(http://golang.org/ref/spec#Expressions) 清楚地说明了什么"表达式通过将操作符和函数应用于操作数来指定值的计算。" 所以去fmt尝试解析你的模式" f(x t,y t)"作为函数调用,所以不是" t"它需要逗号或括号。

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