Skip to content

Commit 9c2fbb9

Browse files
committed
trip print, improve readme file
1 parent 286768e commit 9c2fbb9

3 files changed

Lines changed: 86 additions & 41 deletions

File tree

README.md

Lines changed: 68 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@
99
* Calc field from JavaScript expression
1010
* Calc field from multi Object
1111

12-
## Usage
12+
## Demo Usage
13+
14+
* source
1315

1416
```go
1517
package main
1618

1719
import (
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

3149
type 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

4166
func 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

demo/basic.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package main
22

33
import (
4+
"encoding/json"
45
"fmt"
56

67
"github.com/pkgng/structor"
@@ -56,5 +57,11 @@ func main() {
5657
farmer := Farmer{}
5758
structor.New().Set("Human", &man).Set("address", address).Set("Wife", &wife).Construct(&farmer)
5859

59-
fmt.Printf("%#v\n", farmer)
60+
// fmt.Printf("%#v\n", farmer)
61+
62+
b, err := json.Marshal(farmer)
63+
if err != nil {
64+
fmt.Println("JSON ERR:", err)
65+
}
66+
fmt.Println(string(b))
6067
}

structor.go

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package structor
33
import (
44
"database/sql"
55
"errors"
6-
"fmt"
76
"reflect"
87
"strings"
98

@@ -65,13 +64,13 @@ func (s *Structor) getStructorBase(t interface{}) *BaseStructor {
6564
return nil
6665
}
6766

68-
func execute(langis *otto.Otto, script string) interface{} {
69-
value, _ := langis.Run(script)
70-
r, e := value.Export()
67+
func execute(langis *otto.Otto, script string) (interface{}, error) {
68+
value, e := langis.Run(script)
69+
r, _ := value.Export()
7170
if e != nil {
72-
fmt.Println(e)
71+
return nil, e
7372
}
74-
return r
73+
return r, nil
7574
}
7675

7776
func (s *Structor) Construct(target interface{}) error {
@@ -110,7 +109,7 @@ func calc(root *Structor, base *BaseStructor, target interface{}) (err error) {
110109

111110
toField := to.FieldByName(field.Name)
112111
if toField.Kind() == reflect.Struct {
113-
fmt.Printf("deep in %s @ %s\n", field.Name, field.Tag.Get("structor"))
112+
// fmt.Printf("deep in %s @ %s\n", field.Name, field.Tag.Get("structor"))
114113
base2 := root.getStructorBase(toField.Addr().Interface())
115114
if base2 == nil {
116115
calc(root, base, toField.Addr().Interface())
@@ -122,21 +121,13 @@ func calc(root *Structor, base *BaseStructor, target interface{}) (err error) {
122121
}
123122

124123
script := field.Tag.Get("structor")
125-
if script == "" {
124+
if script == "" || !toField.IsValid() || !toField.CanSet() {
126125
continue
127126
}
128127

129-
r := execute(base.langis, script)
130-
fmt.Printf("%s -> %v\n", script, r)
131-
132-
if toField.IsValid() {
133-
if toField.CanSet() {
134-
if !set(toField, indirect(reflect.ValueOf(r))) {
135-
fmt.Printf("--------------- set failed on %s\n", field.Name)
136-
}
137-
} else {
138-
fmt.Printf("---------------- can not set: %s\n", field.Name)
139-
}
128+
if r, err := execute(base.langis, script); err == nil {
129+
// fmt.Printf("%s -> %v\n", script, r)
130+
set(toField, indirect(reflect.ValueOf(r)))
140131
}
141132
}
142133

0 commit comments

Comments
 (0)