有没有一种直接的方法可以将某些字段为“通用”( interface{}) 的结构转换为具有相同字段名称但“强类型”( , 等) 的另一种int类型string?
可以这么说,给定定义:
package main
import (
"fmt"
)
type GenericData struct {
Hard int
Soft interface{}
}
type Data struct {
Hard int
Soft int
}
type GenericDataGenerator func() GenericData
func generateGenericData() interface{} {
return GenericData{1, 2}
}
func returnsGenericDataGenerator() interface{} {
return generateGenericData
}
GenericData从到转换是否Data需要显式转换所有interface{}字段?有没有更直接的方法来做到这一点?
func main() {
gd := generateGenericData()
fmt.Println(gd)
fmt.Println(gd.(GenericData))
// Doesn't work, but is straightforward
// fmt.Println(gd.(Data))
// Works, but is not straight forward
fmt.Println(Data{gd.(GenericData).Hard, gd.(GenericData).Soft.(int)})
genDataGenerator := returnsGenericDataGenerator()
// Doesn't work, but is straightforward
//genDataGenerator.(GenericDataGenerator)()
// Works, but is not straight forward
resp := genDataGenerator.(func() interface{})()
fmt.Println(resp.(GenericData))
}
代码可以执行在: https ://play.golang.org/p/_UVBi5It1FY
呼啦一阵风
相关分类