Ось ще 3 пропозиції чи методи:
З додатковим полем
Ви можете додати додаткове поле, щоб повідомити, чи структура була заповнена чи вона порожня. Я навмисно назвав його, ready
а не empty
тому, що нульове значення a bool
є false
, тому якщо ви створите нову структуру, як-от Session{}
її ready
поле, буде автоматично, false
і воно скаже вам правду: що структура ще не готова (вона порожня).
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
Коли ви ініціалізуєте структуру, вам доведеться встановити ready
значення true
. Ваш isEmpty()
метод більше не потрібен (хоча ви можете створити його, якщо хочете), оскільки ви можете просто протестувати саме ready
поле.
var s Session
if !s.ready {
// do stuff (populate s)
}
Значення цього додаткового bool
поля збільшується в міру збільшення структури або якщо вона містить поля, які не можна порівняти (наприклад, map
значення зрізу та функції).
Використання нульового значення існуючого поля
Це схоже на попередню пропозицію, але воно використовує нульове значення існуючого поля, яке вважається недійсним, коли структура не порожня. Користування цим залежить від реалізації.
Наприклад, якщо у вашому прикладі playerId
не може бути порожнім string
""
, ви можете використовувати його для перевірки, чи ваша структура порожня так:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
У цьому випадку варто включити цю перевірку в isEmpty()
метод, оскільки ця перевірка залежить від реалізації:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
І використовуючи це:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
Використовуйте вказівник на свою структуру
Друга пропозиція полягає у використанні покажчика на вашу структуру: *Session
. Покажчики можуть мати nil
значення, тому ви можете перевірити їх:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}