Hier sind 3 weitere Vorschläge oder Techniken:
Mit einem zusätzlichen Feld
Sie können ein zusätzliches Feld hinzufügen, um festzustellen, ob die Struktur ausgefüllt wurde oder leer ist. Ich habe es absichtlich benannt ready
und nicht, empty
weil der Nullwert von a bool
ist false
. Wenn Sie also eine neue Struktur wie Session{}
das ready
Feld erstellen, wird diese automatisch angezeigt false
und es wird Ihnen die Wahrheit sagen: dass die Struktur noch nicht fertig ist (sie ist leer).
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
Wenn Sie die Struktur zu initialisieren, müssen Sie Satz ready
an true
. Ihre isEmpty()
Methode wird nicht mehr benötigt (obwohl Sie eine erstellen können, wenn Sie möchten), da Sie nur das ready
Feld selbst testen können.
var s Session
if !s.ready {
// do stuff (populate s)
}
Die Bedeutung dieses einen zusätzlichen bool
Feldes nimmt zu, wenn die Struktur größer wird oder wenn sie Felder enthält, die nicht vergleichbar sind (z. B. Slice- map
und Funktionswerte).
Verwenden des Nullwerts eines vorhandenen Feldes
Dies ähnelt dem vorherigen Vorschlag, verwendet jedoch den Nullwert eines vorhandenen Felds, das als ungültig betrachtet wird wenn die Struktur nicht leer ist. Die Verwendbarkeit hängt von der Implementierung ab.
Wenn Sie in Ihrem Beispiel beispielsweise playerId
nicht leer sein können string
""
, können Sie damit testen, ob Ihre Struktur wie folgt leer ist:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
In diesem Fall lohnt es sich, diese Prüfung in eine isEmpty()
Methode aufzunehmen, da diese Prüfung implementierungsabhängig ist:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
Und damit:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
Verwenden Sie den Zeiger für Ihre Struktur
Der zweite Vorschlag ist, einen Zeiger auf Ihre Struktur zu verwenden : *Session
. Zeiger können nil
Werte haben, sodass Sie sie testen können:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}