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 ready
dan tidak empty
karena nilai nol dari bool
adalah false
, jadi jika Anda membuat struct baru seperti Session{}
yang ready
lapangan akan secara otomatis false
dan 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 ready
ke true
. isEmpty()
Metode Anda tidak diperlukan lagi (meskipun Anda dapat membuatnya jika Anda mau) karena Anda dapat menguji ready
bidang itu sendiri.
var s Session
if !s.ready {
// do stuff (populate s)
}
Signifikansi dari satu bool
bidang tambahan ini meningkat saat struct tumbuh lebih besar atau jika berisi bidang yang tidak sebanding (misalnya irisan, map
dan 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 playerId
tidak 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 nil
nilai, jadi Anda dapat mengujinya:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}