提醒继续在 https://go-review.googlesource.com/c/go/+/79536 中进行工作。
例如,len
和 cap
从不会产生任何副作用,了解 i == len(x) || i == len(x)
是一个可疑的表达式是有用的。
更广泛地说,这可以扩展到自动检测哪些函数没有副作用。但这需要访问具有完整类型信息的完整源代码,可能复杂且昂贵,所以我不确定它是否适合 vet。
上述内容的一个简化版本是添加标准库函数,如 strings.Contains
或 path.Join
。我不知道 vet 是否可以对标准库包进行不同的处理。
3条答案
按热度按时间d8tt03nd1#
https://golang.org/cl/97775提到了这个问题:
cmd/vet: teach vet that len and cap are pure funcs
kxkpmulp2#
https://golang.org/cl/112177提到了这个问题:
cmd/vet: assume that no builtin funcs are pure
bvuwiixz3#
我已经放弃了我为这个CL发送的版本,因为它需要更多的工作,并且出现了相当多的合并冲突。也许将来会有其他人接手这个问题。