当前位置: 首页 > 面试题库 >

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

宣高朗
2023-03-14
问题内容

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

array[index] = struct{}{}

要么

make(map[type]struct{})

问题答案:

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在从地图创建集合时,将其用作值类型可能更方便,因为检查元素是否在其中的语法更简单。



 类似资料:
  • 问题内容: package main 我想读入 我已经问了几个相关问题。 我已经阅读了一些文章和帖子,但仍然找不到解决方法。 问题答案: 我认为您正在以错误的方式进行操作。如果要使用C库,则可以使用C库读取文件。 不要纯粹使用cgo来拥有结构定义,您应该在Go中自己创建它们。然后,您可以编写适当的编组/解组代码以从原始字节读取。 快速的Google显示,有人已经完成了将相关C库的外观转换为Go所需

  • 问题内容: 假设我有以下结构: 如果我将该结构作为对象 如果我将此对象设置为nil 它不起作用,实际上是类型分配错误,但适用于映射和切片。那么,我将如何删除该对象(即取消分配)呢?我查看了内置的delete文档,但它从给定的映射中删除了一个条目。谢谢。 问题答案: Go是一种垃圾收集语言。您不应该这样做,也不能从内存中删除对象。这样做是垃圾收集器的 职责 和 责任 ,并且它是 自动执行的 。当对象

  • struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示: type person struct { name string age int } 看到了吗?声明一个struct如此简单,上面的类型包

  • 此函数用于定义类型的结构对象,该结构对象由defstruct操作创建。 语法 (Syntax) 以下是语法。 (struct structname values) Parameters - 'structname'是要赋予结构的名称。 'values'是需要分配给结构的键值的值。 Return Value - 返回一个struct对象,其值映射到结构的键。 例子 (Example) 以下程序显示

  • 准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的str,你得配合位运算符这么写: >>> n = 10240099 >>> b1 = chr((n & 0

  • 准确地讲,Python没有专门处理字节的数据类型。但由于b'str'可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的bytes,你得配合位运算符这么写: >>> n = 10240099 >>> b1 = (n & 0xff