99* Calc field from JavaScript expression
1010* Calc field from multi Object
1111
12- ## Usage
12+ ## Demo Usage
13+
14+ * source
1315
1416``` go
1517package main
1618
1719import (
20+ " encoding/json"
1821 " fmt"
1922
2023 " github.com/pkgng/structor"
@@ -24,40 +27,84 @@ type Human struct {
2427 Name string
2528 Role string
2629 Age *int32
30+ Tel string
2731 Notes []string
28- Flags []byte
32+ Flags string
33+ }
34+
35+ type AddressT struct {
36+ Address string
37+ Adcode string
38+ Gps string
39+ }
40+
41+ type WifeT struct {
42+ structor.BaseStructor ` structor:"CopyByName,Wife"`
43+ Name string
44+ NickName string ` structor:"Wife.Name.toLocaleLowerCase()"`
45+ Age int
46+ Age3 int32 ` structor:"self.Age + 3"`
2947}
3048
3149type Farmer struct {
32- Name string
33- Age int64
34- Nickname string ` structor:"self.Name.toLocaleLowerCase()"`
35- DoubleAge int32 ` structor:"Human.Age * 2"`
36- SuperRule string ` structor:"'Farmer-' + Human.Role"`
37- Notes []string ` structor:"Human.Notes.reverse()"`
38- FlagCnt int ` structor:"Human.Flags.length"`
50+ structor.BaseStructor ` structor:"CopyByName,Human,address"`
51+ Name string
52+ Age int64
53+ Nickname string ` structor:"self.Name.toLocaleLowerCase()"`
54+ DoubleAge int32 ` structor:"Human.Age * 2"`
55+ SuperRole string ` structor:"'Farmer-' + Human.Role"`
56+ Notes []string ` structor:"Human.Notes.reverse()"`
57+ Flags []string ` structor:"Human.Flags.split(',')"`
58+ Contact struct {
59+ Tel string ` structor:"Human.Tel"`
60+ Address string ` structor:"address.Address"`
61+ Adcode string ` structor:"address.Adcode"`
62+ }
63+ Wife WifeT
3964}
4065
4166func main () {
42- var age int32 = 18
43- man := Human{Name: " ZhangSan" , Age: &age, Role: " Admin" , Notes: []string {" hello" , " world" }, Flags: []byte {' x' , ' y' , ' z' }}
67+ var age int32 = 23
68+ var age2 int32 = 22
69+ man := Human{Name: " LiLei" , Age: &age, Tel: " 18611009988" , Role: " Farmer" , Notes: []string {" hello" , " world" }, Flags: " a,b,c" }
70+ address := AddressT{Adcode: " 110108" , Address: " 北京海淀区五道口优盛大厦D座" , Gps: " 116.328115,40.054629" }
71+ wife := Human{Name: " HanMeiMei" , Age: &age2, Role: " Wife" , Notes: []string {" hello" , " world" }, Flags: " e,f,g" }
72+
4473 farmer := Farmer{}
74+ structor.New ().Set (" Human" , &man).Set (" address" , address).Set (" Wife" , &wife).Construct (&farmer)
4575
46- structor. NewStructor (&farmer). Set ( " Human " , &man). CopyByName (). Construct ( )
76+ // fmt.Printf("%#v\n ", farmer )
4777
48- fmt.Printf (" %#v \n " , farmer)
78+ b , err := json.Marshal (farmer)
79+ if err != nil {
80+ fmt.Println (" JSON ERR:" , err)
81+ }
82+ fmt.Println (string (b))
4983}
5084```
5185
86+ * output
87+
5288``` output
53- Farmer {
54- Name: "ZhangSan",
55- Age: 18,
56- Nickname: "zhangsan",
57- DoubleAge: 36,
58- SuperRule: "Farmer-Admin",
59- Notes: []string{"world", "hello"},
60- FlagCnt: 3
89+ {
90+ "Name":"LiLei",
91+ "Age":23,
92+ "Nickname":"lilei",
93+ "DoubleAge":46,
94+ "SuperRole":"Farmer-Farmer",
95+ "Notes":["world","hello"],
96+ "Flags":["a","b","c"],
97+ "Contact":{
98+ "Tel":"18611009988",
99+ "Address":"北京海淀区五道口优盛大厦D座",
100+ "Adcode":"110108"
101+ },
102+ "Wife":{
103+ "Name":"HanMeiMei",
104+ "NickName":"hanmeimei",
105+ "Age":22,
106+ "Age3":25
107+ }
61108 }
62109```
63110
0 commit comments