go cmd/vet: flag likely incorrect %T usages on reflect.Type

i5desfxk  于 6个月前  发布在  Go
关注(0)|答案(3)|浏览(45)

在使用Go反射的代码中,用户打印类型是很常见的。然而,人们(习惯性地)很容易在使用%T时使用reflect.Type,而实际上应该使用%v
例如:

t := reflect.TypeOf(...)
if checkValid(t) {
    panic(fmt.Sprintf("invalid type: %T", t)) // incorrect: should be using %v
}

在代码审查过程中,很难检测到错误的动词。
在类似的情况下,我认为我从未见过一个人实际上想要打印reflect.Type本身的类型(顺便说一下,它是*reflect.rtype,对用户来说并不特别有趣)。
\cc @dominikh,以防这是一种更适合于staticcheck而不是vet的检查。

qvtsj1bj

qvtsj1bj1#

我认为这对于精确性和正确性来说是没问题的。关于频率,我不太确定;这个bug在实践中出现得有多频繁?我想我之前看到过这个bug一两次,这让我觉得它比其他很多兽医检查要少得多,但也许我的经验是有偏见的。

ubbxdtey

ubbxdtey2#

在示例代码中有一个拼写错误:缺少闭合的双引号。

smdncfj3

smdncfj33#

感谢指出拼写错误。我已经更新了示例。

相关问题