空結構

結構是一系列命名元素,稱為欄位,每個元素都有一個名稱和一個型別。空結構沒有欄位,就像這個匿名的空結構:

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.")
}