go中空struct{}的用途
在 Go 语言中,空的 struct{} 类型主要用于占位,可以在需要一个类型而不需要任何值的场景中使用。
一个典型的应用场景是使用空的 struct{} 类型作为 channel 的数据类型,用来通信。
例如,在并发编程中,我们可以使用空的 struct{} 类型来实现信号量,具体示例如下所示:
package main
import (
"fmt"
)
func main() {
semaphore := make(chan struct{}, 3)
for i := 0; i < 3; i++ {
go func(id int) {
semaphore <- struct{}{}
fmt.Println(id, "start")
// do something
fmt.Println(id, "end")
<-semaphore
}(i)
}
}
在上面的代码中,我们定义了一个信号量 semaphore,初始容量为 3,用来限制并发的数量。每个 goroutine 在执行之前都会从信号量中获取一个许可,执行完成后再将许可释放。这样,同时最多只能有 3 个 goroutine 运行,可以保证程序的并发安全。
除了用作信号量,空的 struct{} 类型还有其他应用场景。例如,我们可以使用空的 struct{} 类型作为 map 的键类型,来实现一个 set 数据结构。
``` package main
import "fmt"
type set map[struct{}]struct{}
func main() { s := make(set) s.add(1) s.add(2) s.
Copyright © 2022-2023, Koudai Team