空結構
結構是一系列命名元素,稱為欄位,每個元素都有一個名稱和一個型別。空結構沒有欄位,就像這個匿名的空結構:
var s struct{}
或者像這個命名的空結構型別:
type T struct{}
關於空結構的有趣之處在於,它的大小為零(嘗試 The Go Playground ):
fmt.Println(unsafe.Sizeof(s))
這列印 0
,因此空結構本身不佔用記憶體。所以它是退出頻道的好選擇,比如(試試 The Go Playground ):
package main
import (
"fmt"
"time"
)
func main() {
done := make(chan struct{})
go func() {
time.Sleep(1 * time.Second)
close(done)
}()
fmt.Println("Wait...")
<-done
fmt.Println("done.")
}