go proposal: plugin: add Syms method

xmjla07d  于 6个月前  发布在  Go
关注(0)|答案(4)|浏览(49)

你好。
我想对plugin package进行一个小小的修改。

  • Plugin结构体有一个名为syms的字段,它保存了所有导出的变量或函数名。它也是线程安全的。但是,当我们使用Plugin*结构体时,我们无法访问这个字段,而使用那个Map会很有用,例如在一个想要向用户列出插件导出的所有函数的程序中。

因此,我的建议是将字段syms改为Syms,这样我们就可以在导入插件包时使用了。

rjzwgtxy

rjzwgtxy1#

更有可能的是func (p *Plugin) Syms() []string方法。不幸的是,据我所知,plugin包目前基本上没有维护,尽管这个变化很小。

yws3nbqq

yws3nbqq2#

更有可能的是func (p *Plugin) Syms() []string方法。不幸的是,据我所知,plugin包目前基本上没有维护,尽管这个变化很小。
哦,我真的很想访问这种数据XD。有人能在这个包里做这个改变吗?我对github的问题系统相当无知,顺便说一下,这是我打开的第一个问题。
你建议的方法也是有效的,但有人可能想要获取symsMap所持有的接口列表等。所以,我认为仅导出这个字段是一个很好且有用的解决方案。谢谢你的回答,也 :-)

axkjgtzd

axkjgtzd3#

导出字段不太可能,原因有几个,但最大的原因是它会变得可变。即使你有一个方法只是返回它,比如 func (p *Plugin) Syms() map[string]any { return p.syms } ,它仍然会是可变的,因为Map实际上在内部是一个指针,复制它们只复制那个指针。可以执行完整的复制,但那将相当昂贵,而且与仅返回键的切片相比,好处不大。然后可以将键手动输入到 Lookup 中以获取实际符号。此外,如果你查看 the definition of Lookup ,它实际上调用了另一个可能是平台特定的函数,因此允许直接访问Map将允许用户绕过平台特定的代码,这可能会非常混乱。
话虽如此,我不是维护者。虽然我显然认为我对所有这些都是正确的,但最终还是取决于实际项目维护者。

6jygbczu

6jygbczu4#

导出字段不太可能,原因有几个,但最大的原因是它会变得可变。即使你有一个方法只是返回它,比如 func (p *Plugin) Syms() map[string]any { return p.syms } ,它仍然会是可变的,因为Map实际上在内部是一个指针,复制它们只复制那个指针。可以执行完整的复制,但那将相当昂贵,而且与仅返回键的切片相比,好处不大,后者可以手动输入到 Lookup 中以获取实际符号。此外,如果你看看 the definition of Lookup ,它实际上调用了另一个可能是平台特定的函数,所以允许直接访问Map将允许用户绕过平台特定的代码,这可能会非常混乱。
话虽如此,我不是维护者。虽然我显然认为我对所有这些都是正确的,但最终还是取决于实际项目维护者。
是的,你是对的,谢谢你的纠正。我认为你的建议,即返回Map键的函数,应该是在插件结构体上添加的一个不错的方法。再次感谢 S2

相关问题