@H_301_3@
package main import ( "fmt" "reflect" ) type MyStruct struct { name string } func (this *MyStruct) GetName() string { return this.name } func (this *MyStruct) SayName(name string) (string,int) { //fmt.Println(name) return "hello",2 } func main() { s := "this is string" fmt.Println(reflect.TypeOf(s)) fmt.Println(reflect.ValueOf(s)) fmt.Println("-------------------") var x float64 = 3.4 fmt.Println(reflect.TypeOf(x)) fmt.Println(reflect.ValueOf(x)) fmt.Println("-------------------") a := new(MyStruct) a.name = "fjgui" fmt.Println(reflect.ValueOf(a)) fmt.Println(reflect.TypeOf(a)) fmt.Println(reflect.TypeOf(a).NumMethod()) b := reflect.ValueOf(a).MethodByName("GetName").Call([]reflect.Value{}) fmt.Println(b[0]) fmt.Println("-------------------") args := []reflect.Value{reflect.ValueOf("liming")} result := reflect.ValueOf(a).MethodByName("SayName").Call(args) if len(result) > 0 { for _,resp := range result { if resp.Interface() != nil { fmt.Println(resp.Interface()) } } } }
@H_301_3@
C:/Go/bin/go.exe build -i [F:/Go/src/reflect]@H_301_3@
F:/Go/src/reflect/reflect.exe [F:/Go/src/reflect]@H_301_3@
string@H_301_3@
this is string@H_301_3@
-------------------@H_301_3@
float64@H_301_3@
3.4@H_301_3@
-------------------@H_301_3@
&{fjgui}@H_301_3@
*main.MyStruct@H_301_3@
2@H_301_3@
fjgui@H_301_3@
-------------------@H_301_3@
hello@H_301_3@
2@H_301_3@