映射键类型"identifier"无效



类型定义以下:

type tuple struct{
key string
value string
}
type identifier struct{
metricName tuple
labels []tuple
}
type value struct{
timestamp int64
timeSeriesValue float64  
}
type DataModel map[identifier][]value

给出错误:invalid map key type identifier

struct类型可以是Go

中的键identifier类型不可比较?

映射键类型必须具有可比性,虽然您说的结构类型允许作为映射键,但它们仍然需要具有可比性。只有当它们的字段具有可比性时,结构才具有可比性,由于切片不具有可比性,因此identifier不是一个可比较的类型。因此,它不能是映射键类型。

Go规范在这两部分中非常清楚地说明了这一点:

  • https://golang.org/ref/spec Map_types
  • https://golang.org/ref/spec Comparison_operators

您最初的问题是关于identifier不具有可比性并且是无效的映射键类型。但至于你接下来的问题,关于该怎么办:

很难说基于这里的代码进行操作的最佳方法,但我要注意指针值是可比较的,因此将DataModel定义为

可能会很好地工作。
type DataModel map[*identifier][]value

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

https://golang.org/ref/spec Map_types

因此,它不会编译,因为切片是结构体的一部分,用作键。

相关内容

  • 没有找到相关文章

最新更新