/
bind_struct.go
77 lines (72 loc) · 1.58 KB
/
bind_struct.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package bind
import (
"log"
"reflect"
. "github.com/rainmyy/easyDB/library/strategy"
)
type Struct struct {
length int
value interface{}
}
func (s *Struct) Bind(treeList []*TreeStruct, obj interface{}) {
tagsMapList := getBindParams(obj)
if len(tagsMapList) == 0 {
return
}
robj := reflect.ValueOf(obj)
if robj.Kind() != reflect.Ptr || robj.IsNil() {
return
}
var ginBindStruct func(treeList []*TreeStruct)
ginBindStruct = func(treeList []*TreeStruct) {
if len(treeList) == 0 {
return
}
}
ginBindStruct(treeList)
return
}
func (s *Struct) GetValue() interface{} {
return s.value
}
func DefaultBindStruct(treeList []*TreeStruct, obj interface{}) []interface{} {
tagsMapList := getBindParams(obj)
if len(tagsMapList) == 0 {
return nil
}
robj := reflect.ValueOf(obj)
if robj.Kind() != reflect.Ptr || robj.IsNil() {
return nil
}
var ginBindStruct func(treeList []*TreeStruct)
ginBindStruct = func(treeList []*TreeStruct) {
if len(treeList) == 0 {
return
}
}
ginBindStruct(treeList)
return nil
}
func getBindParams(obj interface{}) []map[string]string {
t := reflect.TypeOf(obj)
if t.Kind() == reflect.Ptr {
t = t.Elem()
}
if t.Kind() != reflect.Struct {
log.Print("error: type is not struct")
return nil
}
tagsMapList := make([]map[string]string, 0)
for i := 0; i < t.NumField(); i++ {
tagMap := make(map[string]string)
fieldame := t.Field(i).Name
fieldTag := t.Field(i).Tag
tagName := fieldTag.Get("bind")
if tagName == "" {
continue
}
tagMap[fieldame] = tagName
tagsMapList = append(tagsMapList, tagMap)
}
return tagsMapList
}