From ac81840d80ee5901fb3f6fa4b91e5d09679c135d Mon Sep 17 00:00:00 2001 From: Huangzj Date: Tue, 29 Dec 2020 09:34:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(Go-StudyExample):2020/12/29=EF=BC=9A?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E3=80=90Go=E6=AF=8F=E6=97=A5=E4=B8=80?= =?UTF-8?q?=E5=BA=93=E3=80=91copier=E5=A4=8D=E5=88=B6=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BD=93=E7=9A=84=E5=90=8C=E5=90=8D=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/copier/Copier_test.go | 57 +++++++++++++++++++++++++++++++++++ example/copier/readme.md | 5 +++ readme.md | 2 ++ 3 files changed, 64 insertions(+) create mode 100644 example/copier/Copier_test.go create mode 100644 example/copier/readme.md diff --git a/example/copier/Copier_test.go b/example/copier/Copier_test.go new file mode 100644 index 0000000..dee3c52 --- /dev/null +++ b/example/copier/Copier_test.go @@ -0,0 +1,57 @@ +/* + * @Author : huangzj + * @Time : 2020/12/29 9:16 + * @Description: + */ + +package copier + +import ( + "fmt" + "github.com/jinzhu/copier" + "testing" +) + +type User struct { + Name string + Age int + Role string +} + +func (u *User) DoubleAge() int { + return u.Age * 2 +} + +type Employee struct { + Name string + Age int + SuperRole string + DoubleAge int +} + +func (e *Employee) Role(role string) { + e.SuperRole = "通过role得到superRole" + role +} + +func TestCopier(t *testing.T) { + user := User{Name: "dj", Age: 18} + users := []User{ + {Name: "dj", Age: 18, Role: "Admin"}, + {Name: "dj2", Age: 18, Role: "Dev"}, + } + employee := Employee{} + var employees []Employee + + //通过 【Role】 方法转换 User的Role属性到 Employee 的SuperRole -- 这个方法名好像要和被转换的一致才行 + //通过 User 的 【DoubleAge】 方法转换到 Employee 的同名属性 + _ = copier.Copy(&employee, &user) + fmt.Println(fmt.Sprintf("%#v\n", employee)) + + //结构体转换到数组,相当于append操作,不过是类型不同,复制具体属性 + _ = copier.Copy(&employees, &user) + fmt.Println(fmt.Sprintf("%#v\n", employees)) + + //不同的结构体数组的转换 + _ = copier.Copy(&employees, &users) + fmt.Println(fmt.Sprintf("%#v\n", employee)) +} diff --git a/example/copier/readme.md b/example/copier/readme.md new file mode 100644 index 0000000..415ad0f --- /dev/null +++ b/example/copier/readme.md @@ -0,0 +1,5 @@ +获取包命令: go get github.com/jinzhu/copier + +参考地址:https://segmentfault.com/a/1190000022008881 + +参考地址:https://github.com/darjun/go-daily-lib \ No newline at end of file diff --git a/readme.md b/readme.md index 26296ae..1f3eb08 100644 --- a/readme.md +++ b/readme.md @@ -39,6 +39,8 @@ json与struct之间转换处理工具使用示例 2020/12/28:新增【Go每日一库】sJson快速设置json串内容 +2020/12/29:新增【Go每日一库】copier复制不同结构体的同名属性 + # mod vendor模式加载包 通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到