空结构

结构是一系列命名元素,称为字段,每个元素都有一个名称和一个类型。空结构没有字段,就像这个匿名的空结构:

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