一尘不染

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

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可以做到这一点吗?


阅读 226

收藏
2020-07-02

共1个答案

一尘不染

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

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

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

2020-07-02