最后更新于4年前
结构体是存放了一系列有命名的元素,又被称为字段,每个字段都有自己的名字和类型。空结构体就是指没有字段的结构体,例如下面这个匿名空结构体:
空结构体也可以是像下面这样的具名结构体:
有趣的是,空结构体的长度(所占内存大小)为0。
鉴于空结构体所占内存为0,所以用它退出channel是很好的选择:
自己手动维护特别的值退出channel目前已不算最佳实践。用结构体实现HashSet时,字段值用空结构体填充是很好的选择。
// 译者注:再次提示,这里的s是结构体实例化之后的变量名 // 该结构体本身没有名字,所以叫匿名结构体 var s struct{}
// 译者注:这里的结构体名字为T type T struct{} // 译者注:理解变量名和结构体名的区别了吗? var s T
fmt.Println(unsafe.Sizeof(s)) // 输出0
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.") }