GO empty struct{}

<- struct{}{}

Posted by Jam on November 28, 2019

GO empty struct{}

  • 空struct 节省内存
1
2
3
a := struct {}{}
fmt.Println(unsafe.Sizeof(a))
// 0
  • channel struct{}
1
2
3
4
5
6
7
8
9
10
11
func main()  {
	done := make(chan struct{})

	go func() {
		fmt.Println("hello 111")
		done <- struct{}{}
	}()

	<- done
}

与channel一起使用,可做信号通知管道,其本身无实际价值,空struct{} 对内存更加友好,空struct类数据内存申请部分,返回都是固定地址,避免滥用。

1
2
3
4
5
6
7
8
9
10
11
type notify struct{}

func main()  {
	done := make(chan notify)
	go func() {
		fmt.Println(“hello 111”)
		done <- notify{}
	}()

	<- done
}