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

如何在 go 中动态更改函数参数类型

如何在 go 中动态更改函数参数类型

Go
哈士奇WWW 2023-06-01 15:13:34
我有一个程序如下。我正在尝试动态更改函数参数的类型,因为我正在使用的另一个库需要传递myMethod具有具体类型而不是该接口的签名才能进行正确的解组。在 Go 中是否有可能动态生成一个函数或匿名函数,其参数类型是动态生成的,或者可能更改函数的参数类型?package mainimport (    "fmt"    "reflect")type MyType interface {    doThis()}type MyType1 struct{}func (m MyType1) doThis() {    fmt.Println("Type1 doThis")}type MyType2 struct{}func (m MyType2) doThis() {    fmt.Println("Type2 doThis")}func myMethod(myType MyType) {    myType.doThis()}func main() {    fmt.Println("Hello, playground")    var type1 MyType    type1 = &MyType1{}    type1Val := reflect.TypeOf(type1)    // TODO - change myMethod signature dynamically to accept type1Val as the type}我正在使用的库公开了一个registerSomething(someFunc)输入参数类型someFunc稍后将在某些解组中使用的位置。如果输入参数类型是一个接口,unmarshal 将返回一个映射。如果它是一个类型化的结构,解组将返回类型化的结构,所有参数都正确填充,所以我不必处理解组。
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

如何在go中动态更改函数参数类型[?]

你根本做不到。Go 是静态类型的。

(让你的代码运行是微不足道的,但可能不是你想要的:

type1Val := reflect.ValueOf(type1)
myMethod(*(type1Val.Interface().(*MyType1)))

我不得不承认我不明白你在这里想用反映做什么。)


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号