Go: Vorschlag: cmd/vet: vet sollte warnen, wenn time.Time type (oder typen embed it) als Kartenschlüssel verwendet wird.

Erstellt am 4. Dez. 2017  ·  3Kommentare  ·  Quelle: golang/go

Welche Version von Go verwenden Sie ( go version )?

go version go1.9.2 linux/amd64

Reproduziert sich dieses Problem mit der neuesten Version?

Jawohl

Was haben Sie gemacht?

package main

import "time"

type T struct {
    time.Time
}

var a map[T]string

func main() {
}

$ go vet a.go
$ [nothing reported]

Was hast du erwartet zu sehen?

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

Wie time.Time kann es einige andere Typen geben, die nicht als Kartenschlüsseltypen verwendet werden können.

Was hast du stattdessen gesehen?

nichts gemeldet

FrozenDueToAge Proposal

Hilfreichster Kommentar

Ich glaube nicht, dass dies die Messlatte für einen Tierarztcheck erfüllt.

Es ist absolut gültig, eine Zeit.Zeit als Kartenschlüssel zu verwenden, wenn Sie wissen, was Sie tun. Ich denke, es wäre zu laut für gültigen Code.

Aber jemand könnte auf GitHub eine Analyse durchführen, um zu sehen, wie viel Prozent der Zeitkarten gültig sind.

Alle 3 Kommentare

Ich glaube nicht, dass dies die Messlatte für einen Tierarztcheck erfüllt.

Es ist absolut gültig, eine Zeit.Zeit als Kartenschlüssel zu verwenden, wenn Sie wissen, was Sie tun. Ich denke, es wäre zu laut für gültigen Code.

Aber jemand könnte auf GitHub eine Analyse durchführen, um zu sehen, wie viel Prozent der Zeitkarten gültig sind.

Ich habe einen Linter geschrieben, der diese Art von Problem erkennt, wenn Sie interessiert sind: https://github.com/m3db/build-tools/blob/master/linters/badtime/README.md

Ich versuche gerade, es in gometalinter zu integrieren.

Jetzt, wo der Tierarzt Teil des Go-Tests ist, liegt die Messlatte für neue Kontrollen noch höher. Weil es manchmal gültig _ist_, eine Zeit.Zeit als Kartenschlüssel zu haben, ist es nicht in Ordnung, sie beim Tierarzt abzulehnen.

Du könntest mit

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

ianlancetaylor picture ianlancetaylor  ·  3Kommentare

rakyll picture rakyll  ·  3Kommentare

bradfitz picture bradfitz  ·  3Kommentare

jayhuang75 picture jayhuang75  ·  3Kommentare

longzhizhi picture longzhizhi  ·  3Kommentare