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

Go中的结构集

谢泉
2023-03-14
问题内容

如果我要存储许多结构:

type Stuff struct {
    a string
    b string
}

我可以用片来做,但是看起来使用更少的内存可以使用适当的set结构。

不幸的是,Go没有固定的结构。每个人都建议使用,map[Stuff]struct{}但由于Stuff是结构,所以不起作用。有人有什么好的解决方案吗?理想情况下,无需下载库。


问题答案:

通常,设置和映射数据结构比将一组值存储在按设置的普通数组或切片中需要更多的内存,并且映射提供有效的附加功能,例如唯一性或通过键检索值。

如果要最小化内存使用量,只需将它们存储在一个切片中,例如[]Stuff。如果在多个位置使用值,则仅存储其指针也可能会有利可图,例如[]*Stuff,因此,每个存储相同Stuff值的位置都可以存储相同的指针(而不必复制值)。

如果您只想存储唯一的struct值,那么在Go中使用来实现确实是最方便的选择map

没问题map[Stuff]struct{},它可以正常工作。地图密钥类型的要求:

该比较操作符
==和=必须为键类型的操作数被完全定义!; 因此,键类型不能为函数,映射或切片。

Stuff是一个结构,并且在以下情况下,Go中的结构是可比较的:

如果结构的所有字段都是可比较的,则它们的值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。

如果您的Stuff结构是您发布的结构,则它是可比较的:它仅包含可比较类型的字段string

还要注意,如果要设置数据结构,则将其bool用作值类型(例如map[Stuff]bool)和值会更清楚true,然后您可以简单地使用索引来测试值是否在映射中,因为索引表达式会产生如果键(在您的情况下)不在地图中,则该值类型false为的零值(对于boolStuff,正确告诉您要查找的值不在“集合”中。(如果它在地图中,则其关联true值是索引表达式的结果-
正确地告诉它在地图中)。



 类似资料:
  • 问题内容: 我正在看Go,它看起来很有前途。我试图弄清楚如何获得go结构的大小,例如 我当然知道它是24字节,但是我想以编程方式知道它。 您对如何执行此操作有任何想法吗? 问题答案: 注意: OP错误。unsafe.Sizeof确实在示例Coord3d结构上返回24。请参阅下面的评论。

  • 问题内容: 所以现在我有一个用于客户端连接的结构,如下所示 而且我还获得了ClientConn的地图,如下所示 因此,我在与clientList的每个连接上添加了一个新的ClientConn,但是我想做的是对clientList进行json处理,并获取一个ClientConn数组,其中包含其值,而不仅仅是键。 如果我做 然后我只是得到一个带有空对象的键,而我想要检索的是带有值和键的整个Client

  • Go语言结构体数据类是将各个类型的变量定义的集合,通常用来表示记录。 package main import "fmt" // 这个person结构体有name和age成员 type person struct { name string age int } func main() { // 这个语法创建一个新结构体变量 fmt.Println(person{"B

  • 问题内容: 我已经开始使用https://mholt.github.io/json-to-go/将API JSON转换为go结构,但我真的很喜欢它,但是我仍然坚持如何在Report Definition结构中初始化Filters数组结构如下所示。 我似乎无法引用在Filters结构甚至是Filters结构中声明的项,以创建新的Filter项目并将其附加到Filters。 是否可以使用原样编写的Re

  • 问题内容: package main 结构中无名字段的目的是什么? 是否可以像使用命名字段一样访问这些字段? 问题答案: 请参阅“ 在Go中嵌入 ”:您在结构中嵌入了一个匿名字段:通常与嵌入式结构一起使用,而不是像这样的基本类型。该类型没有要显示的“提升字段”。 字段或方法在一个结构匿名字段的被称为 促进 如果是一个合法的选择器,它表示字段或方法。 提升的字段的作用类似于结构的普通字段,只是它们不

  • 问题内容: 比较运算符的 “ Go编程语言规范”部分使我相信,仅包含可比较字段的结构应具有可比性: 如果结构的所有字段都是可比较的,则它们的值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。 这样,由于“ Student”结构中的所有字段都是可比较的,因此我希望编译以下代码: 但是,它无法使用以下消息进行编译: 无效的操作:alice> = carol(运算符> =未在结构上定义) 我