Go: 建议:cmd/vet:当 time.Time 类型(或嵌入它的类型)用作映射键时,兽医应该发出警告。

创建于 2017-12-04  ·  3评论  ·  资料来源: golang/go

您使用的是哪个版本的 Go ( go version )?

转到版本 go1.9.2 linux/amd64

这个问题会在最新版本中重现吗?

是的

你做了什么?

package main

import "time"

type T struct {
    time.Time
}

var a map[T]string

func main() {
}

$ go vet a.go
$ [nothing reported]

你期待看到什么?

$ go vet a.go
$ time.Time is not a good map key type.

像 time.Time 一样,可能还有一些其他类型不能用作映射键类型。

你看到了什么?

没有报道

FrozenDueToAge Proposal

最有用的评论

我认为这不符合兽医检查的要求。

如果您知道自己在做什么,那么使用 time.Time 作为映射键是完全有效的。 我认为对于有效代码来说太吵了。

但是有人可以在 GitHub 上做一些分析,看看有多少时间是有效的。时间键控的地图是有效的。

所有3条评论

我认为这不符合兽医检查的要求。

如果您知道自己在做什么,那么使用 time.Time 作为映射键是完全有效的。 我认为对于有效代码来说太吵了。

但是有人可以在 GitHub 上做一些分析,看看有多少时间是有效的。时间键控的地图是有效的。

如果您有兴趣,我编写了一个检测此类问题的 linter: https :

我现在正在尝试将其与 gometalinter 集成。

既然兽医是 go test 的一部分,新检查的标准就更高了。 因为有时有时间是有效的。时间作为地图键,在兽医中拒绝它是不行的。

您可以与@dominikh讨论将其添加到 megacheck 或其他短绒工具之一。

此页面是否有帮助?
0 / 5 - 0 等级