我看过Golang文档,还没有看到如何实现我想要做的事的示例。具体来说,我正在尝试将inode映射为ino_entry,该映射由在我的计算机上syscall.Stat_t.Ino具有类型的inode表示,该inode由uint64我的机器上的类型表示type ino_entry struct { st *syscall.Stat_t nodes []string}其中节点代表硬链接到索引节点的所有文件的名称。但是,uint64如果可以的话,我想避免将文字类型放入地图的规范中。也就是说map [uint64] ino_entry,我宁愿编写而不是编写map [typeof(syscall.Stat_t.Ino)] ino_entry,在其中typeof(x)返回的静态(即,编译时)类型x。我已经尝试过,map [syscall.Stat_t.Ino] ino_entry并且类似于类开关map [syscall.Stat_t.Ino.(type)] ino_entry,但是这两个都是语法错误。不用说,这map [reflect.Typeof(syscall.Stat_t.Ino)] ino_entry是行不通的。据我所知,在不对结构元素的类型进行硬编码的情况下,实现此功能的唯一方法是使用inomap := make(map [interface{}] ino_entry)然后使用类型声明来访问元素(尽管我不知道正确的语法)。有没有一种方法可以基于另一个变量,结构或接口成员的静态类型来声明变量的类型,而无需明确地对该类型进行硬编码?
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
cf. OP中的最后一个问题:是的,有一种方法可以基于任何表达式的类型来声明变量的类型,而无需硬拷贝表达式的类型:
v := expr // equal to var v typeof(expr); v = expr;
expr
还包括您提到的大多数实体,即另一个变量,一个键入“ thing”的结构,但不包括接口成员(因为在规范中没有提及任何成员)。
不幸的是,这与声明映射类型无关,在这种情况下/当使用的类型文字是form时map[T]U
。此处T
和U
都不能像上面讨论的简短变量声明的情况那样进行推断。
- 3 回答
- 0 关注
- 232 浏览
添加回答
举报
0/150
提交
取消