转到-正在转换..结构的接口{}



我有一个场景,在这个场景中,我调用一个函数,该函数利用了一个通用的后台工作线程,该线程的参数为func somefunction(data ...interface{}),以便在整个应用程序中通用和可重用。

在其中一个函数中,参数的数量更多,在函数定义中,我像一样单独投射数组项

someVar := data[0].(string)

现在,当我通常处理1-2个论点时,这种方法很好。但是,当自变量的数量增加时,它就会变得乏味。

那么,有没有一种更干净的方法可以按照元素的出现顺序将其解析为结构?

我的目标是以一种更干净的方式来实现这一点,而不是单独从数组中获取一个并强制转换为字符串变量。

解释场景的示例代码https://go.dev/play/p/OScAjyyLW0W

使用反射包在接口{}的切片中的值上设置字段。必须导出字段。

// setFields set the fields in the struct pointed to by dest
// to args. The fields must be exported.
func setFields(dest interface{}, args ...interface{}) {
v := reflect.ValueOf(dest).Elem()
for i, arg := range args {
v.Field(i).Set(reflect.ValueOf(arg))
}
}

这样称呼它:

type PersonInfo struct {  
ID       string  // <-- note exported field names.
Name     string
Location string
}
var pi PersonInfo
setFields(&pi, "A001", "John Doe", "Tomorrowland")

游乐场示例。

最新更新