From 78173a1628aa127f4cc6493217fe55b0a174d7ad Mon Sep 17 00:00:00 2001 From: wandoubaba Date: Tue, 19 Nov 2024 12:27:49 +0800 Subject: [PATCH] =?UTF-8?q?aceid=E6=94=B9=E4=B8=BAaceld?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bilibili/{aceid => aceld}/README.md | 0 bilibili/{aceid => aceld}/array/test1/test.go | 0 bilibili/{aceid => aceld}/const/test.go | 0 bilibili/{aceid => aceld}/defer/test1/test.go | 0 bilibili/{aceid => aceld}/defer/test2/test.go | 0 bilibili/{aceid => aceld}/defer/test3/test.go | 0 bilibili/{aceid => aceld}/func/test.go | 0 bilibili/{aceid => aceld}/hello/hello.go | 0 bilibili/{aceid => aceld}/init/go.mod | 0 bilibili/{aceid => aceld}/init/lib1/lib1.go | 0 bilibili/{aceid => aceld}/init/lib2/lib2.go | 0 bilibili/{aceid => aceld}/init/main.go | 0 bilibili/{aceid => aceld}/map/test1/test.go | 0 .../{aceid => aceld}/pointor/test1/test.go | 0 .../{aceid => aceld}/pointor/test2/test.go | 0 bilibili/{aceid => aceld}/slice/test1/test.go | 0 .../{aceid => aceld}/struct/class/test.go | 0 .../{aceid => aceld}/struct/inherit/test.go | 0 .../{aceid => aceld}/struct/interface/test.go | 0 bilibili/{aceid => aceld}/struct/kong/test.go | 0 .../{aceid => aceld}/struct/pair1/test.go | 0 .../{aceid => aceld}/struct/pair2/test.go | 0 bilibili/aceld/struct/reflect/test.go | 63 +++++++++++++++++++ bilibili/aceld/struct/reflect2/main.go | 58 +++++++++++++++++ .../{aceid => aceld}/struct/test1/test.go | 0 bilibili/{aceid => aceld}/var/test.go | 0 26 files changed, 121 insertions(+) rename bilibili/{aceid => aceld}/README.md (100%) rename bilibili/{aceid => aceld}/array/test1/test.go (100%) rename bilibili/{aceid => aceld}/const/test.go (100%) rename bilibili/{aceid => aceld}/defer/test1/test.go (100%) rename bilibili/{aceid => aceld}/defer/test2/test.go (100%) rename bilibili/{aceid => aceld}/defer/test3/test.go (100%) rename bilibili/{aceid => aceld}/func/test.go (100%) rename bilibili/{aceid => aceld}/hello/hello.go (100%) rename bilibili/{aceid => aceld}/init/go.mod (100%) rename bilibili/{aceid => aceld}/init/lib1/lib1.go (100%) rename bilibili/{aceid => aceld}/init/lib2/lib2.go (100%) rename bilibili/{aceid => aceld}/init/main.go (100%) rename bilibili/{aceid => aceld}/map/test1/test.go (100%) rename bilibili/{aceid => aceld}/pointor/test1/test.go (100%) rename bilibili/{aceid => aceld}/pointor/test2/test.go (100%) rename bilibili/{aceid => aceld}/slice/test1/test.go (100%) rename bilibili/{aceid => aceld}/struct/class/test.go (100%) rename bilibili/{aceid => aceld}/struct/inherit/test.go (100%) rename bilibili/{aceid => aceld}/struct/interface/test.go (100%) rename bilibili/{aceid => aceld}/struct/kong/test.go (100%) rename bilibili/{aceid => aceld}/struct/pair1/test.go (100%) rename bilibili/{aceid => aceld}/struct/pair2/test.go (100%) create mode 100644 bilibili/aceld/struct/reflect/test.go create mode 100644 bilibili/aceld/struct/reflect2/main.go rename bilibili/{aceid => aceld}/struct/test1/test.go (100%) rename bilibili/{aceid => aceld}/var/test.go (100%) 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