diff --git a/bilibili/aceid/README.md b/bilibili/aceld/README.md similarity index 100% rename from bilibili/aceid/README.md rename to bilibili/aceld/README.md diff --git a/bilibili/aceid/array/test1/test.go b/bilibili/aceld/array/test1/test.go similarity index 100% rename from bilibili/aceid/array/test1/test.go rename to bilibili/aceld/array/test1/test.go diff --git a/bilibili/aceid/const/test.go b/bilibili/aceld/const/test.go similarity index 100% rename from bilibili/aceid/const/test.go rename to bilibili/aceld/const/test.go diff --git a/bilibili/aceid/defer/test1/test.go b/bilibili/aceld/defer/test1/test.go similarity index 100% rename from bilibili/aceid/defer/test1/test.go rename to bilibili/aceld/defer/test1/test.go diff --git a/bilibili/aceid/defer/test2/test.go b/bilibili/aceld/defer/test2/test.go similarity index 100% rename from bilibili/aceid/defer/test2/test.go rename to bilibili/aceld/defer/test2/test.go diff --git a/bilibili/aceid/defer/test3/test.go b/bilibili/aceld/defer/test3/test.go similarity index 100% rename from bilibili/aceid/defer/test3/test.go rename to bilibili/aceld/defer/test3/test.go diff --git a/bilibili/aceid/func/test.go b/bilibili/aceld/func/test.go similarity index 100% rename from bilibili/aceid/func/test.go rename to bilibili/aceld/func/test.go diff --git a/bilibili/aceid/hello/hello.go b/bilibili/aceld/hello/hello.go similarity index 100% rename from bilibili/aceid/hello/hello.go rename to bilibili/aceld/hello/hello.go diff --git a/bilibili/aceid/init/go.mod b/bilibili/aceld/init/go.mod similarity index 100% rename from bilibili/aceid/init/go.mod rename to bilibili/aceld/init/go.mod diff --git a/bilibili/aceid/init/lib1/lib1.go b/bilibili/aceld/init/lib1/lib1.go similarity index 100% rename from bilibili/aceid/init/lib1/lib1.go rename to bilibili/aceld/init/lib1/lib1.go diff --git a/bilibili/aceid/init/lib2/lib2.go b/bilibili/aceld/init/lib2/lib2.go similarity index 100% rename from bilibili/aceid/init/lib2/lib2.go rename to bilibili/aceld/init/lib2/lib2.go diff --git a/bilibili/aceid/init/main.go b/bilibili/aceld/init/main.go similarity index 100% rename from bilibili/aceid/init/main.go rename to bilibili/aceld/init/main.go diff --git a/bilibili/aceid/map/test1/test.go b/bilibili/aceld/map/test1/test.go similarity index 100% rename from bilibili/aceid/map/test1/test.go rename to bilibili/aceld/map/test1/test.go diff --git a/bilibili/aceid/pointor/test1/test.go b/bilibili/aceld/pointor/test1/test.go similarity index 100% rename from bilibili/aceid/pointor/test1/test.go rename to bilibili/aceld/pointor/test1/test.go diff --git a/bilibili/aceid/pointor/test2/test.go b/bilibili/aceld/pointor/test2/test.go similarity index 100% rename from bilibili/aceid/pointor/test2/test.go rename to bilibili/aceld/pointor/test2/test.go diff --git a/bilibili/aceid/slice/test1/test.go b/bilibili/aceld/slice/test1/test.go similarity index 100% rename from bilibili/aceid/slice/test1/test.go rename to bilibili/aceld/slice/test1/test.go diff --git a/bilibili/aceid/struct/class/test.go b/bilibili/aceld/struct/class/test.go similarity index 100% rename from bilibili/aceid/struct/class/test.go rename to bilibili/aceld/struct/class/test.go diff --git a/bilibili/aceid/struct/inherit/test.go b/bilibili/aceld/struct/inherit/test.go similarity index 100% rename from bilibili/aceid/struct/inherit/test.go rename to bilibili/aceld/struct/inherit/test.go diff --git a/bilibili/aceid/struct/interface/test.go b/bilibili/aceld/struct/interface/test.go similarity index 100% rename from bilibili/aceid/struct/interface/test.go rename to bilibili/aceld/struct/interface/test.go diff --git a/bilibili/aceid/struct/kong/test.go b/bilibili/aceld/struct/kong/test.go similarity index 100% rename from bilibili/aceid/struct/kong/test.go rename to bilibili/aceld/struct/kong/test.go diff --git a/bilibili/aceid/struct/pair1/test.go b/bilibili/aceld/struct/pair1/test.go similarity index 100% rename from bilibili/aceid/struct/pair1/test.go rename to bilibili/aceld/struct/pair1/test.go diff --git a/bilibili/aceid/struct/pair2/test.go b/bilibili/aceld/struct/pair2/test.go similarity index 100% rename from bilibili/aceid/struct/pair2/test.go rename to bilibili/aceld/struct/pair2/test.go diff --git a/bilibili/aceld/struct/reflect/test.go b/bilibili/aceld/struct/reflect/test.go new file mode 100644 index 0000000..10bf83d --- /dev/null +++ b/bilibili/aceld/struct/reflect/test.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + "reflect" +) + +type User struct { + Id int + Name string + Age int +} + +func (this *User) Call() { + fmt.Println("user is called...") + fmt.Printf("%v\n", this) +} + +func (this User) ThisCall() { + fmt.Println("user is called...") + fmt.Printf("%v\n", this) +} + +func reflectNum(arg interface{}) { + fmt.Println("type: ", reflect.TypeOf(arg)) + fmt.Println("value: ", reflect.ValueOf(arg)) +} + +func main() { + var num float64 = 1.2345 + reflectNum(num) + + user := User{1, "Aceld", 18} + + DoFieldAndMethod(user) +} + +func DoFieldAndMethod(input interface{}) { + // 获取input的type + inputType := reflect.TypeOf(input) + fmt.Println("inputType is: ", inputType.Name()) + + // 获取input的value + inputValue := reflect.ValueOf(input) + fmt.Println("inputValue is: ", inputValue) + fmt.Println(inputType.NumMethod()) + + // 通过type获取里面的字段 + // 1. 获取interface的reflect.Type,通过Type得到NumField,进行遍历 + // 2. 得到每个field,数据类型 + // 3. 通过field有一个Interface()方法得到对应的value + // for i := 0; i < inputType.NumField(); i++ { + // field := inputType.Field(i) + // value := inputValue.Field(i).Interface() + // fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value) + // } + + // 通过type获取里面的方法,调用 + for i := 0; i < inputType.NumMethod(); i++ { + m := inputType.Method(i) + fmt.Printf("%s: %v\n", m.Name, m.Type) + } +} diff --git a/bilibili/aceld/struct/reflect2/main.go b/bilibili/aceld/struct/reflect2/main.go new file mode 100644 index 0000000..35720d6 --- /dev/null +++ b/bilibili/aceld/struct/reflect2/main.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" + "reflect" +) + +type User struct { + Name string + Sex string + Age int + secret string +} + +func (this *User) PointerCall() { + fmt.Println("*User is called ...") + fmt.Printf("%v\n", this) +} + +func (this User) Call() { + fmt.Println("User is called ...") + fmt.Printf("%v\n", this) +} + +func main() { + user := User{"Aaron", "male", 18, "my secrets"} + GetFieldsAndMethods(user) +} + +func GetFieldsAndMethods(input interface{}) { + inputType := reflect.TypeOf(input) + inputValue := reflect.ValueOf(input) + fmt.Println("inputType: ", inputType.Name()) + fmt.Println("inputValue: ", inputValue) + numField := inputType.NumField() + numMethod := inputType.NumMethod() + fmt.Println("numField: ", numField) + fmt.Println("numMethod: ", numMethod) + // 遍历属性并打印键值 + for i := 0; i < inputType.NumField(); i++ { + field := inputType.Field(i) + fmt.Println(field.PkgPath) + // PkgPath is the package path that qualifies a lower case (unexported) + // field name. It is empty for upper case (exported) field names. + // See https://golang.org/ref/spec#Uniqueness_of_identifiers + if field.PkgPath == "" { + value := inputValue.Field(i).Interface() + fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value) + } else { + fmt.Printf("%s: %v = \n", field.Name, field.Type) + } + } + // 遍历方法并打印 + for i := 0; i < inputType.NumMethod(); i++ { + m := inputType.Method(i) + fmt.Printf("%s: %v\n", m.Name, m.Type) + } +} diff --git a/bilibili/aceid/struct/test1/test.go b/bilibili/aceld/struct/test1/test.go similarity index 100% rename from bilibili/aceid/struct/test1/test.go rename to bilibili/aceld/struct/test1/test.go diff --git a/bilibili/aceid/var/test.go b/bilibili/aceld/var/test.go similarity index 100% rename from bilibili/aceid/var/test.go rename to bilibili/aceld/var/test.go