我想知道Go中的“ struct {}”和“ struct {} {}”是什么意思?示例如下:
array[index] = struct{}{}
要么
make(map[type]struct{})
struct是Go中的关键字。它用于定义结构类型,结构类型是命名元素的序列。
struct
例如:
type Person struct { Name string Age int }
的struct{}是一个struct具有零个元素类型。通常在不存储任何信息时使用。它具有大小为0的优点,因此通常不需要内存来存储type值struct{}。
struct{}
struct{}{}另一方面是复合文字,它构造一个类型的值struct{}。复合文字构造用于类型的值,例如结构,数组,映射和切片。它的语法是大括号后跟元素的类型。由于“空”结构(struct{})没有字段,因此元素列表也为空:
struct{}{}
struct{} {} | ^ | ^ type empty element list
作为示例,让我们在Go中创建一个“集合”。Go没有内置的集合数据结构,但是它具有内置的映射。我们可以将地图用作集合,因为一张地图最多只能有一个具有给定键的条目。并且由于我们只想将键(元素)存储在地图中,因此我们可以将地图值类型选择为struct{}。
包含string元素的地图:
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在从地图创建集合时,将其用作值类型可能更方便,因为检查元素是否在其中的语法更简单。
bool