有没有办法在 golang 中定义可索引类型?

fat*_*tih 3 indexing types go

我最近遇到一个通过直接索引进行图形处理的库graph[key],即我有一个节点树,它的子节点位于某个属性下node.childs[key]

我想知道是否有一种方法来定义类型,以便可以通过直接键映射访问属性,例如node[key]映射到node.childs[key]. 有没有办法在定义新类型时实现这一点?

icz*_*cza 5

不,你不可能做你想做的事。规范不允许。规格:索引表达式:

形式的主要表达

a[x]
Run Code Online (Sandbox Code Playgroud)

表示数组的元素、指向a由索引的数组、切片、字符串或映射的指针x。该值分别x称为索引映射键。以下规则适用:

对于数组类型a:[...] A

对于指向数组类型的指针a:[...]

对于切片类型a:[...] S

对于字符串类型a:[...]

对于地图类型a:[...] M

对于a类型参数类型 P:[...]

否则a[x]是违法的。

只有这些列出的类型是可索引的,其他类型都不能。而且您甚至无法更改索引运算符的含义(您无法覆盖它)。