AdSense

網頁

2024/4/9

Golang chan struct{}用途

網路上一些Go goroutine數量限制的範例中,常看到宣告Channel的型態為空struct chan struct{}的原因。


空struct為沒有任何欄位的struct,即struct{}

例如宣告channel為空structch := make(chan struct{}, 0),及送資料給channel時為ch <- struct{}{}

想說為甚麼不用chan boolchan int?這是因為空struct的長度為0,若channel單純只用來作為阻塞goroutine,那麽ch <- struct{}佔用的空間是最少的。

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    s := struct{}{}
    fmt.Println(unsafe.Sizeof(s)) // 0
}


沒有留言:

AdSense