Voici 3 autres suggestions ou techniques:
Avec un champ supplémentaire
Vous pouvez ajouter un champ supplémentaire pour dire si la structure a été remplie ou si elle est vide. Je l'ai nommé intentionnellement ready
et pas empty
parce que la valeur zéro de a bool
est false
, donc si vous créez une nouvelle structure comme Session{}
son ready
champ le sera automatiquement false
et elle vous dira la vérité: que la structure n'est pas encore prête (elle est vide).
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
Lorsque vous initialisez la structure, vous devez définir ready
sur true
. Votre isEmpty()
méthode n'est plus nécessaire (bien que vous puissiez en créer une si vous le souhaitez) car vous pouvez simplement tester le ready
champ lui-même.
var s Session
if !s.ready {
// do stuff (populate s)
}
La signification de ce bool
champ supplémentaire augmente au fur et à mesure que la structure grossit ou si elle contient des champs qui ne sont pas comparables (par exemple, map
les valeurs de tranche et de fonction).
Utilisation de la valeur zéro d'un champ existant
Ceci est similaire à la suggestion précédente, mais il utilise la valeur zéro d'un champ existant qui est considéré comme invalide lorsque la structure n'est pas vide. L'utilisabilité de ceci dépend de l'implémentation.
Par exemple, si dans votre exemple vous playerId
ne pouvez pas être le vide string
""
, vous pouvez l'utiliser pour tester si votre structure est vide comme ceci:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
Dans ce cas, il vaut la peine d'incorporer cette vérification dans une isEmpty()
méthode car cette vérification dépend de l'implémentation:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
Et en l'utilisant:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
Utilisez Pointer pour votre structure
La deuxième suggestion est d'utiliser un pointeur sur votre struct: *Session
. Les pointeurs peuvent avoir des nil
valeurs, vous pouvez donc le tester:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}