我有一个场景,在这个场景中,我调用一个函数,该函数利用了一个通用的后台工作线程,该线程的参数为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")
游乐场示例。