Berikut adalah 3 saran atau teknik lainnya:
Dengan Bidang Tambahan
Anda dapat menambahkan bidang tambahan untuk mengetahui apakah struct telah diisi atau kosong. Aku sengaja menamakannya readydan tidak emptykarena nilai nol dari booladalah false, jadi jika Anda membuat struct baru seperti Session{}yang readylapangan akan secara otomatis falsedan akan memberitahu Anda kebenaran: bahwa struct tidak-belum siap (itu kosong).
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
Saat Anda menginisialisasi struct, Anda harus mengatur readyke true. isEmpty()Metode Anda tidak diperlukan lagi (meskipun Anda dapat membuatnya jika Anda mau) karena Anda dapat menguji readybidang itu sendiri.
var s Session
if !s.ready {
// do stuff (populate s)
}
Signifikansi dari satu boolbidang tambahan ini meningkat saat struct tumbuh lebih besar atau jika berisi bidang yang tidak sebanding (misalnya irisan, mapdan nilai fungsi).
Menggunakan Nilai Nol dari Bidang yang Ada
Ini mirip dengan saran sebelumnya, tetapi menggunakan nilai nol dari bidang yang ada yang dianggap tidak valid jika struct tidak kosong. Kegunaan ini bergantung pada implementasi.
Misalnya jika dalam contoh Anda playerIdtidak boleh kosong string "", Anda dapat menggunakannya untuk menguji apakah struct Anda kosong seperti ini:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
Dalam hal ini, ada baiknya menggabungkan pemeriksaan ini ke dalam isEmpty()metode karena pemeriksaan ini bergantung pada implementasi:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
Dan menggunakannya:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
Gunakan Pointer ke struct Anda
Saran kedua adalah dengan menggunakan Pointer untuk struct Anda: *Session. Pointer dapat memiliki nilnilai, jadi Anda dapat mengujinya:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}