คำแนะนำหรือเทคนิคเพิ่มเติม 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)
}