获取结构元素的静态类型

我看过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)然后使用类型声明来访问元素(尽管我不知道正确的语法)。


有没有一种方法可以基于另一个变量,结构或接口成员的静态类型来声明变量的类型,而无需明确地对该类型进行硬编码?


MYYA
浏览 233回答 3
3回答

MM们

Stat_t对于任何机器都具有相同的定义,并且其Ino字段始终为uint64,因此这在这里应该不是问题。如果有一个编译时运算符可以静态获取此类型,则必须对其进行很好的隐藏。但是,您可以定义一个类型别名:type ino_id uint64,这对我来说更具可读性。

至尊宝的传说

cf. OP中的最后一个问题:是的,有一种方法可以基于任何表达式的类型来声明变量的类型,而无需硬拷贝表达式的类型:v := expr // equal to var v typeof(expr); v = expr;expr还包括您提到的大多数实体,即另一个变量,一个键入“ thing”的结构,但不包括接口成员(因为在规范中没有提及任何成员)。不幸的是,这与声明映射类型无关,在这种情况下/当使用的类型文字是form时map[T]U。此处T和U 都不能像上面讨论的简短变量声明的情况那样进行推断。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go