一尘不染

Go中的struct {}和struct {} {}如何工作?

go

我想知道Go中的“ struct {}”和“ struct {} {}”是什么意思?示例如下:

array[index] = struct{}{}

要么

make(map[type]struct{})

阅读 338

收藏
2020-07-02

共1个答案

一尘不染

struct是Go中的关键字。它用于定义结构类型结构类型是命名元素的序列。

例如:

type Person struct {
    Name string
    Age  int
}

struct{}是一个struct具有零个元素类型。通常在不存储任何信息时使用。它具有大小为0的优点,因此通常不需要内存来存储type值struct{}

struct{}{}另一方面是复合文字,它构造一个类型的值struct{}。复合文字构造用于类型的值,例如结构,数组,映射和切片。它的语法是大括号后跟元素的类型。由于“空”结构(struct{})没有字段,因此元素列表也为空:

 struct{}  {}
|  ^     | ^
  type     empty element list

作为示例,让我们在Go中创建一个“集合”。Go没有内置的集合数据结构,但是它具有内置的映射。我们可以将地图用作集合,因为一张地图最多只能有一个具有给定键的条目。并且由于我们只想将键(元素)存储在地图中,因此我们可以将地图值类型选择为struct{}

包含string元素的地图:

var set map[string]struct{}
// Initialize the set
set = make(map[string]struct{})

// Add some values to the set:
set["red"] = struct{}{}
set["blue"] = struct{}{}

// Check if a value is in the map:
_, ok := set["red"]
fmt.Println("Is red in the map?", ok)
_, ok = set["green"]
fmt.Println("Is green in the map?", ok)

输出(在Go Playground上尝试):

Is red in the map? true
Is green in the map? false

请注意,但是,bool在从地图创建集合时,将其用作值类型可能更方便,因为检查元素是否在其中的语法更简单。

2020-07-02