-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdop_1.go
106 lines (86 loc) · 1.66 KB
/
dop_1.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
import (
"fmt"
"reflect"
)
type calling interface {
callName() string
callProfession() string
callPosition() string
}
type worker struct {
pers *human
exp int
position string
}
type human struct {
name string
age int
}
type hr struct {
wor *worker
country string
field string
}
func (q hr) callName() string {
a := (*(*(q.wor)).pers).name
return a
}
func (q hr) callProfession() string {
a := "hr"
return a
}
func (q hr) callPosition() string {
a := (*(q.wor)).position
return a
}
type coder struct {
wor worker
primaryTech string
secondaryTech string
}
func (q coder) callName() string {
a := (*(q.wor).pers).name
return a
}
func (q coder) callProfession() string {
a := "coder"
return a
}
func (q coder) callPosition() string {
a := (q.wor).position
return a
}
type cache struct {
m map[int]calling
}
func getTypeName(t interface{}) string {
t1 := reflect.TypeOf(t).Elem()
return t1.Name()
}
func getTypeCache(c cache) []string {
res := make([]string, 0)
for _, v := range c.m {
res = append(res, getTypeName(v))
}
return res
}
func main() {
c := cache{m: make(map[int]calling)}
q1 := &hr{&worker{&human{"John", 24}, 1, "junior"}, "Ukraine", "IT"}
q2 := &hr{&worker{&human{"Jack", 26}, 3, "middle"}, "Ukraine", "Auto"}
q3 := &coder{worker{&human{"Mike", 23}, 2, "middle"}, "golang", "javascript"}
c.m[1] = q1
c.m[2] = q2
c.m[3] = q3
//fmt.Print(q.callPosition())
for _, v := range c.m {
fmt.Println(v.callName())
fmt.Println(v.callPosition())
fmt.Println(v.callProfession())
}
fmt.Println("\n\n")
fmt.Println(getTypeName(q1))
fmt.Println("\n\n")
fmt.Println(getTypeCache(c))
}