คำแนะนำหรือเทคนิคเพิ่มเติม 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)
}
ใช้ตัวชี้ไปที่โครงสร้างของคุณ
ข้อเสนอแนะที่สองคือการใช้ตัวชี้ไปยัง struct *Sessionของคุณ: พอยน์เตอร์สามารถมีnilค่าได้ดังนั้นคุณสามารถทดสอบได้:
var s *Session
if s == nil {
s = new(Session)
// do stuff (populate s)
}