为了账号安全,请及时绑定邮箱和手机立即绑定

获取结构元素的静态类型

获取结构元素的静态类型

Go
MYYA 2021-05-27 10:18:35
我看过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 回答

?
MM们

TA贡献1886条经验 获得超2个赞

Stat_t对于任何机器都具有相同的定义,并且其Ino字段始终为uint64,因此这在这里应该不是问题。

如果有一个编译时运算符可以静态获取此类型,则必须对其进行很好的隐藏。

但是,您可以定义一个类型别名:type ino_id uint64,这对我来说更具可读性。


查看完整回答
反对 回复 2021-05-31
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

cf. OP中的最后一个问题:是的,有一种方法可以基于任何表达式的类型来声明变量的类型,而无需硬拷贝表达式的类型:

v := expr // equal to var v typeof(expr); v = expr;

expr还包括您提到的大多数实体,即另一个变量,一个键入“ thing”的结构,但包括接口成员(因为在规范中没有提及任何成员)。

不幸的是,这与声明映射类型无关,在这种情况下/当使用的类型文字是form时map[T]U。此处TU 都不能像上面讨论的简短变量声明的情况那样进行推断


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信