İşte 3 öneri veya teknik daha:
Ek Alanla
Yapının doldurulup doldurulmadığını veya boş olup olmadığını anlamak için ek bir alan ekleyebilirsiniz. Ben kasıtlı olarak adlandırılmış readyolup empty, bir sıfır değeri nedeniyle boololduğu false, oluşturmak eğer öyleyse gibi yeni bir yapı Session{}kendi readyalanında otomatik olacak falseve size doğruyu söyleyecektir: struct zaman henüz (o boş) hazır olduğunu söyledi.
type Session struct {
ready bool
playerId string
beehive string
timestamp time.Time
}
Yapıyı başlattığınızda, ayarlamanız readygerekir true. Sizin isEmpty()sadece test edebilirsiniz çünkü (isterseniz bir tane oluşturabilirsiniz rağmen) yöntemi artık gerekli değildir readyalanını kendisi.
var s Session
if !s.ready {
// do stuff (populate s)
}
boolYapı büyüdükçe veya karşılaştırılabilir olmayan alanlar (örneğin, dilim mapve fonksiyon değerleri) içerdiğinde , bu ek alanın önemi artar .
Mevcut Bir Alanın Sıfır Değerini Kullanma
Bu önceki öneriye benzer, ancak yapı boş olmadığında geçersiz kabul edilen mevcut bir alanın sıfır değerini kullanır . Bunun kullanılabilirliği uygulamaya bağlıdır.
Örneğin, örneğinizde playerIdboş string ""olamazsanız, yapınızın şu şekilde boş olup olmadığını test etmek için kullanabilirsiniz:
var s Session
if s.playerId == "" {
// do stuff (populate s, give proper value to playerId)
}
Bu durumda, bu denetimi bir isEmpty()yönteme dahil etmeye değer çünkü bu denetim uygulamaya bağlıdır:
func (s Session) isEmpty() bool {
return s.playerId == ""
}
Ve bunu kullanarak:
if s.isEmpty() {
// do stuff (populate s, give proper value to playerId)
}
Yapınız için İşaretçiyi kullanın
İkinci öneri, yapı için bir işaretçi kullanmaktır: *Session. İşaretçilerin nildeğerleri olabilir , böylece test edebilirsiniz:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}