網路上一些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
}
沒有留言:
張貼留言