struct{} 和 struct{}{}
- 一般我们知道
struct
在Go语言中是用于定义结构类型
type User struct {
Name string
Age int
}
而struct {}
是一个无元素的结构体类型,通常在没有信息存储时使用。优点是大小为0,不需要内存来存储struct {}类型的值。
struct {} {}
是一个复合字面量,它构造了一个struct {}类型的值,该值也是空。
- 比如我们可以用
map[string]struct{}
来当作成一个set
来用
var set map[string]struct{}
set = make(map[string]struct{})
set["red"] = struct{}{} // struct{}{} 构造了一个struct {}类型的值
set["blue"] = struct{}{}
_, ok := set["red"]
fmt.Println("Is red in the map?", ok)
_, ok = set["green"]
fmt.Println("Is green in the map?", ok)
输出内容
Is red in the map? true
Is green in the map? false
map可以通过“comma ok”机制来获取该key是否存在,_, ok := map["key"]
,如果没有对应的值,ok
为false
,这样可以通过定义成map[string]struct{}的形式,值不再占用内存。其值仅有两种状态,有或无
其他知识点
chan struct{}
:可以用作通道的退出- 两个
structt{}{}
地址相等