在过去 2 个月内阅读了大约 10 次反射定律后。用它开发相同的时间,我不得不说它是一种很酷且易于理解的语言......至少在一定程度上是这样。我作为 PHP 和 Javascript 开发人员的背景让我很难理解以下示例:package mainimport( "fmt" "reflect")func test1(){ type template struct { Title string Body string } data := []template{ { Title : "About page", Body : "Body info"}, { Body : "About page 2 ", Title : "Body info 2"}, } fmt.Println( "-- TEST ONE --" ) fmt.Println( data[0].Title )}func test2(){ data := []struct{ Title string Body string }{ // Assign with the actual order { "About page", "Body info"}, // Key => Val assignment (Pretty cool) { Body : "Body info 2 ", Title : "About page 2"}, } fmt.Println( "-- TEST TWO --" ) fmt.Println( data[1].Title )}func test3(){ type template struct { Title string Body string } Amap := map[string]interface{}{ "template" : template{}, } w := reflect.ValueOf(Amap["template"]) x := w.Type() y := reflect.TypeOf(w.Interface()) z := reflect.TypeOf(Amap["template"]) fmt.Printf("%+v\n", x) // main.template fmt.Printf("%+v\n", y) // main.template fmt.Printf("%+v\n", z) // main.template /* var data = struct{ // none of the above can be place in here.... ( (w|x|y|z) is not a type) }{ "About page", "Body info"} */ ww := reflect.New(z) xx := ww.Interface() tt := reflect.TypeOf(xx) /* // none of the above can be used this way.... var data = ww{ }{ "About page", "Body info"} */ fmt.Println( "-- TEST THREE --" ) fmt.Println( data.Title )}func main(){ test1() test2() test3()}上面的例子test1()并按test2()预期工作。我想进一步推动它,test3()但没有成功。我能想到的让它工作的唯一方法是使用类型开关..但由于我正在尝试,我想知道:有没有办法从反射值转换匿名结构,而无需检查正在反射的实际结构你能告诉我一个可行的解决方案来解决 2 个注释掉的代码块中的任何一个 test3()
添加回答
举报
0/150
提交
取消