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
package main

import (
"fmt"
"reflect"
)

type order struct {
ordId int
customerId int
}

type employee struct {
name string
id int
address string
salary int
country string
}

func createQuery(q interface{}) {

if reflect.ValueOf(q).Kind() == reflect.Struct {
tableName := reflect.TypeOf(q).Name()
query := fmt.Sprintf("insert into %s(", tableName)

t := reflect.TypeOf(q)
for i := 0; i < t.NumField(); i++ {
if i == 0 {
query = fmt.Sprintf("%s%s", query, t.Field(i).Name)
} else {
query = fmt.Sprintf("%s, %s", query, t.Field(i).Name)
}
}

query = fmt.Sprintf("%s%s", query, ")")
query = query + " values("

v := reflect.ValueOf(q)

for i := 0; i < v.NumField(); i++ {
switch v.Field(i).Kind() {
case reflect.Int:
if i == 0 {
query = fmt.Sprintf("%s%d", query, v.Field(i).Int())
} else {
query = fmt.Sprintf("%s, %d", query, v.Field(i).Int())
}
case reflect.String:
if i == 0 {
query = fmt.Sprintf("%s\"%s\"", query, v.Field(i).String())
} else {
query = fmt.Sprintf("%s, \"%s\"", query, v.Field(i).String())
}
default:
fmt.Println("Unsupported type")
return
}
}
query = fmt.Sprintf("%s)", query)
fmt.Println(query)
return

}
fmt.Println("unsupported type")

}

func main() {
e := employee{
name: "Naveen",
id: 565,
address: "Science Park Road, Singapore",
salary: 90000,
country: "Singapore",
}
createQuery(e)
}
文章目录
  1. 1. 什么是反射?
|