私はGolangのドキュメントを調べましたが、私がやろうとしていることを達成する方法の例を見ていません。syscall.Stat_t.Ino
具体的には、マシン上でタイプを持つinodeからuint64
、次のように定義されたino_entryへのマップを書き込もうとしています。
type ino_entry struct {
st *syscall.Stat_t
nodes []string
}
ここで、nodesは、iノードにハードリンクされているすべてのファイルの名前を表します。
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)
型アサーションを使用して要素にアクセスすることです(ただし、これの正しい構文はわかりません)。
別の変数の静的型、または構造体またはインターフェイスメンバーに基づいて、その型を明示的にハードコーディングせずに変数の型を宣言する方法はありますか?