網路上一些Go goroutine數量限制的範例中,常看到宣告Channel的型態為空struct chan struct{}的原因。
空struct為沒有任何欄位的struct,即struct{}。
例如宣告channel為空structch := make(chan struct{}, 0),及送資料給channel時為ch <- struct{}{}。
想說為甚麼不用chan bool或chan int?這是因為空struct的長度為0,若channel單純只用來作為阻塞goroutine,那麽ch <- struct{}佔用的空間是最少的。
package main
import (
"fmt"
"unsafe"
)
func main() {
s := struct{}{}
fmt.Println(unsafe.Sizeof(s)) // 0
}
沒有留言:
張貼留言