Empty Struct

สำหรับ Go type struct ไม่จำเป็นต้องมี field ก็ได้เช่น

type Empty struct {}

เมื่อไม่มี field หน่วยความจำที่ใช้สำหรับ struct ว่างๆแบบนี้ก็คือ 0 bytes นั่นเอง ลองใช้ฟังก์ชัน Sizeof จาก package unsafe เช็คดูได้ดังนี้

เมื่อเป็น struct แบบนี้ จะเอามาทำอะไรได้ ที่ผมเจอมาคือ เอามาใช้กับ channel ในกรณีที่ต้องการใช้ channel เป็นการควบคุมจังหวะการทำงานของ goroutine ไม่ได้ต้องการส่งข้อมูลจริงๆ หรือ เป็นการบอกว่า goroutine ทำงานเสร็จแล้ว เช่น

ถ้าเราสร้าง array ของ empty struct เนื้อที่รวมที่ได้ก็เป็น 0 เช่นกัน
ส่วน slice ของ empty struct จะใช้แค่ 3 bytes เพื่อเก็บ pointer ไปหา array ภายใน เก็บ Len และ Cap ของ slice

ลองใช้ unsafe.Sizeof เช็คดูได้ดังนี้