Go 中的反射可以促进动态接口的创建和实现吗?
利用 Go 中的接口,可以定义 RPC 风格的接口。对于特定服务,可能会创建如下接口:
type MyService interface { Login(username, password string) (sessionId int, err error) HelloWorld(sessionId int) (hi string, err error) }
目标是利用反射通过将方法调用转换为 RPC 调用、编组输入参数和解组结果来实现此接口。虽然使用反射获取服务调用的输入参数的 []interface{} 是可行的,但使用基于反射的函数创建动态实现接口的值仍然难以实现。
限制和替代方案方法
不可能通过反射生成带有附加方法的类型并随后实例化该类型的对象。虽然使用不安全的包在理论上是可行的,但这将是一项艰巨的任务。
相反,提供有关您试图解决的问题的更多背景信息将使社区能够提出替代解决方案。
更新(2015年7月23日)
Go 1.5引入了reflect.FuncOf和Reflect.MakeFunc,提供所需的功能。
以上是Go反射可以动态创建和实现接口吗?的详细内容。更多信息请关注PHP中文网其他相关文章!