Go: proposta: cmd / vet: vet deve avisar quando o tipo time.Time (ou tipos embutidos) é usado como chaves de mapa.

Criado em 4 dez. 2017  ·  3Comentários  ·  Fonte: golang/go

Qual versão do Go você está usando ( go version )?

go versão go1.9.2 linux / amd64

Este problema se reproduz com a versão mais recente?

sim

O que você fez?

package main

import "time"

type T struct {
    time.Time
}

var a map[T]string

func main() {
}

$ go vet a.go
$ [nothing reported]

O que você esperava ver?

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

Como time.Time, pode haver alguns outros tipos, que não podem ser usados ​​como tipos de chave de mapa.

O que você viu em vez disso?

nada relatado

FrozenDueToAge Proposal

Comentários muito úteis

Eu não acho que isso atenda a um exame veterinário.

É perfeitamente válido usar um time.Time como uma chave de mapa, se você souber o que está fazendo. Acho que seria muito barulhento para um código válido.

Mas alguém poderia fazer algumas análises no GitHub para ver qual porcentagem de tempo. Mapas com chave de tempo são válidos.

Todos 3 comentários

Eu não acho que isso atenda a um exame veterinário.

É perfeitamente válido usar um time.Time como uma chave de mapa, se você souber o que está fazendo. Acho que seria muito barulhento para um código válido.

Mas alguém poderia fazer algumas análises no GitHub para ver qual porcentagem de tempo. Mapas com chave de tempo são válidos.

Escrevi um linter que detecta esse tipo de problema se você estiver interessado: https://github.com/m3db/build-tools/blob/master/linters/badtime/README.md

Estou tentando integrá-lo ao gometalinter agora.

Agora que o veterinário faz parte do teste go, a barra é ainda maior para novos exames. Porque às vezes é válido ter um tempo. O tempo como chave do mapa, rejeitá-lo no veterinário não está certo.

Você pode falar com @dominikh sobre como adicionar isso ao megacheck ou a um dos outros linters.

Esta página foi útil?
0 / 5 - 0 avaliações