İş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ış ready
olup empty
, bir sıfır değeri nedeniyle bool
olduğu false
, oluşturmak eğer öyleyse gibi yeni bir yapı Session{}
kendi ready
alanında otomatik olacak false
ve 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 ready
gerekir true
. Sizin isEmpty()
sadece test edebilirsiniz çünkü (isterseniz bir tane oluşturabilirsiniz rağmen) yöntemi artık gerekli değildir ready
alanını kendisi.
var s Session
if !s.ready {
// do stuff (populate s)
}
bool
Yapı büyüdükçe veya karşılaştırılabilir olmayan alanlar (örneğin, dilim map
ve 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 playerId
boş 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 nil
değerleri olabilir , böylece test edebilirsiniz:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}