类型定义以下:
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
因此,它不会编译,因为切片是结构体的一部分,用作键。