1
1
# Go Pointer
2
2
3
- # 引入依赖
3
+ # 一、 引入依赖
4
4
5
5
``` text
6
- go get -u github.com/CC11001100 /go-pointer
6
+ go get -u github.com/golang-infrastructure /go-pointer
7
7
```
8
8
9
- # 解决了什么问题
9
+ # 二、 解决了什么问题
10
10
11
- 在golang中基本类型因为没有包装类型,所以很多库都倾向于采用基本类型变量的指针来区分是没有传递还是传递了零值 。
11
+ 在golang中基本类型因为没有包装类型,这就导致基本类型无法区分出nil和零值,于是所以很多库都倾向于采用基本类型变量的指针来区分是没有传递还是传递了零值 。
12
12
13
13
一个具体的例子,当不使用指针的时候,在执行任务的时候有个配置项:
14
14
@@ -32,79 +32,51 @@ type Config struct {
32
32
33
33
```
34
34
35
- 但是有时候这个值就是一个字面值常量传进去的,这个时候如果要获取指针类型的话就有点麻烦,上面这个场景只是举了一个例子,这个模块就是用来解决类似的问题的。
35
+ 但是有时候这个值就是一个字面值常量传进去的,比如查询数据库时的分页大小等, 这个时候如果要获取指针类型的话就有点麻烦,上面这个场景只是举了一个例子,这个模块就是用来解决类似的问题的。
36
36
37
- 目前支持的数据类型:
37
+ # 三、Example Code
38
38
39
- ``` text
40
- bool
41
- byte
42
- complex64
43
- complex128
44
- float32
45
- float64
46
- int
47
- int8
48
- int16
49
- int32
50
- int64
51
- rune
52
- string
53
- time.Duration
54
- time.Time
55
- uint
56
- uint8
57
- uint16
58
- uint32
59
- uint64
60
- ```
61
-
62
- # Example Code
63
-
64
- 其它类型用法类似:
39
+ 目前已经支持泛型:
65
40
66
41
``` go
42
+ package main
67
43
68
- // 获取一个布尔指针,其值为true
69
- boolPointer := pointer.TruePointer ()
70
- fmt.Println (reflect.TypeOf (boolPointer)) // output: *bool
71
- fmt.Println (*boolPointer) // output: true
72
-
73
- // 获取一个布尔指针,其值为false
74
- boolPointer = pointer.FalsePointer ()
75
- fmt.Println (reflect.TypeOf (boolPointer)) // output: *bool
76
- fmt.Println (*boolPointer) // output: false
77
-
78
- // 将布尔变量转换为布尔指针
79
- boolVar := true
80
- boolPointer = pointer.ToBoolPointer (boolVar)
81
- fmt.Println (reflect.TypeOf (boolPointer)) // output: *bool
82
- fmt.Println (*boolPointer) // output: true
83
- boolVar = false
84
- boolPointer = pointer.ToBoolPointer (boolVar)
85
- fmt.Println (reflect.TypeOf (boolPointer)) // output: *bool
86
- fmt.Println (*boolPointer) // output: false
87
-
88
- // 将布尔变量转换为布尔指针,如果布尔的值为nil的话则返回nil指针
89
- boolVar = true
90
- boolPointer = pointer.ToBoolPointerOrNilIfFalse (boolVar)
91
- fmt.Println (reflect.TypeOf (boolPointer)) // output: *bool
92
- fmt.Println (*boolPointer) // output: true
93
- boolVar = false
94
- boolPointer = pointer.ToBoolPointerOrNilIfFalse (boolVar)
95
- fmt.Println (reflect.TypeOf (boolPointer)) // output: *bool
96
- fmt.Println (boolPointer) // output: <nil>
97
-
98
- // 读取布尔指针变量的值,如果值为nil的话则返回false
99
- boolVar = pointer.FromBoolPointer (pointer.FalsePointer ())
100
- fmt.Println (boolVar)
101
-
102
- // 读取布尔变量的值,如果布尔指针为nil的话则返回给定的默认值,这个默认值可以是true或者false
103
- boolPointer = nil
104
- boolVar = pointer.FromBoolPointerOrDefault (boolPointer, true )
105
- fmt.Println (boolVar) // output: true
44
+ import (
45
+ " fmt"
46
+ pointer " github.com/golang-infrastructure/go-reflect-utils"
47
+ )
48
+
49
+ func main () {
50
+
51
+ // 返回false的指针
52
+ falsePointer := pointer.FalsePointer ()
53
+ fmt.Println (fmt.Sprintf (" %T %v " , falsePointer, *falsePointer)) // Output: *bool false
54
+
55
+ // 返回true的指针
56
+ truePointer := pointer.TruePointer ()
57
+ fmt.Println (fmt.Sprintf (" %T %v " , truePointer, *truePointer)) // Output: *bool true
58
+
59
+ // 返回对应类型的指针
60
+ v1 := 1
61
+ toPointer := pointer.ToPointer (v1)
62
+ fmt.Println (fmt.Sprintf (" %T %v " , toPointer, *toPointer)) // Output: *int 1
63
+ // 返回对应类型的指针,但是会检查值,如果值为对应类型的零值的话则返回nil
64
+ v1 = 0
65
+ orNil := pointer.ToPointerOrNil (v1)
66
+ fmt.Println (orNil) // Output: nil
67
+
68
+ // 从指针读取值 ,如果为nil指针的话则返回对应类型的零值
69
+ v2 := 1
70
+ v3 := &v2
71
+ fromPointer := pointer.FromPointer (v3)
72
+ fmt.Println (fromPointer) // Output: 1
73
+ // 从指针读取值,如果是nil指针的话则返回给定的默认值
74
+ v2 = 0
75
+ orDefault := pointer.FromPointerOrDefault (v3, 1 )
76
+ fmt.Println (orDefault) // Output: 0
77
+ }
106
78
```
107
-
79
+
108
80
109
81
110
82
0 commit comments