如何在Go中实例化未知类型的值?
我在golang开发了一些服务器。我尝试创建一些包装器函数,它可以在将来帮助我 我所拥有的: 1) 我有一些DTO结构,例如:如何在Go中实例化未知类型的值?,go,reflection,Go,Reflection,我在golang开发了一些服务器。我尝试创建一些包装器函数,它可以在将来帮助我 我所拥有的: 1) 我有一些DTO结构,例如: type Request struct { Field1 string `json:"field1"` Field2 string `json:"field2"` } type Response struct { Field1 string `json:"field1"` Field2 string `json:"fie
type Request struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
}
type Response struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
Field3 string `json:"field3"`
}
func SomeHandler(request *Request) *Response{
...do something
return &Response{"first","second","third"}
}
2) 在控制器层,我有一些函数(按照约定)接收1个参数(指向结构的指针)并返回1个结果(指向结构的指针),例如:
type Request struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
}
type Response struct {
Field1 string `json:"field1"`
Field2 string `json:"field2"`
Field3 string `json:"field3"`
}
func SomeHandler(request *Request) *Response{
...do something
return &Response{"first","second","third"}
}
我需要的是:
我需要编写作为参数接收的包装器函数:
有谁能帮我实现这个包装器吗?你所做的有点奇怪,但可以提供你需要的所有信息
func myFunction(a string, b int32) error {
return nil
}
func myWrapper(mystery interface{}) {
typ := reflect.TypeOf(mystery)
// Check typ.Kind before playing with In(i);
for i := 0; i < typ.NumIn(); i++ {
fmt.Printf("Param %d: %v\n", i, typ.In(i))
}
for i := 0; i < typ.NumOut(); i++ {
fmt.Printf("Result %d: %v\n", i, typ.Out(i))
}
}
你所做的有点奇怪,但可以提供你需要的所有信息
func myFunction(a string, b int32) error {
return nil
}
func myWrapper(mystery interface{}) {
typ := reflect.TypeOf(mystery)
// Check typ.Kind before playing with In(i);
for i := 0; i < typ.NumIn(); i++ {
fmt.Printf("Param %d: %v\n", i, typ.In(i))
}
for i := 0; i < typ.NumOut(); i++ {
fmt.Printf("Result %d: %v\n", i, typ.Out(i))
}
}
类似的方法应该可以工作(未经测试):
请注意,第二步是不必要的。类似的方法应该可以工作(未经测试):
请注意,第二步是不必要的。谢谢您的回答。你写道我做的事情有点像有线电视,也许你是对的,我是golang的新手。那个么解决这个问题的方法是什么呢?我不想多次编写类似的代码,但在许多“控制器”函数中,我需要做同样的事情:将json的输入解码到我的模型(结构),将对象中的数据编码到json,然后将其写入输出,但我不明白如何以go-way的方式进行,你能帮我吗?@YuriiVasilchuk我不明白你的确切用例。我认为您可以改变方法,使用单个函数进行编码和解码(go的Marshal/Unmarshal非常通用:它们接受接口{},因此您可以传递任何内容)。这个函数需要知道的只是源/目标类型,我认为您可以从处理程序中“知道”这一点。谢谢您的回答。你写道我做的事情有点像有线电视,也许你是对的,我是golang的新手。那个么解决这个问题的方法是什么呢?我不想多次编写类似的代码,但在许多“控制器”函数中,我需要做同样的事情:将json的输入解码到我的模型(结构),将对象中的数据编码到json,然后将其写入输出,但我不明白如何以go-way的方式进行,你能帮我吗?@YuriiVasilchuk我不明白你的确切用例。我认为您可以改变方法,使用单个函数进行编码和解码(go的Marshal/Unmarshal非常通用:它们接受接口{},因此您可以传递任何内容)。这个函数只需要知道源/目标类型,我想您可以从处理程序中“知道”这一点。