Skip to content

Commit c0cadcc

Browse files
authored
Merge pull request #1 from golang-infrastructure/dev
Dev
2 parents bf5ad3d + 54ddac0 commit c0cadcc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+224
-1201
lines changed

README.md

+43-71
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# Go Pointer
22

3-
# 引入依赖
3+
# 一、引入依赖
44

55
```text
6-
go get -u github.com/CC11001100/go-pointer
6+
go get -u github.com/golang-infrastructure/go-pointer
77
```
88

9-
# 解决了什么问题
9+
# 二、解决了什么问题
1010

11-
在golang中基本类型因为没有包装类型,所以很多库都倾向于采用基本类型变量的指针来区分是没有传递还是传递了零值
11+
在golang中基本类型因为没有包装类型,这就导致基本类型无法区分出nil和零值,于是所以很多库都倾向于采用基本类型变量的指针来区分是没有传递还是传递了零值
1212

1313
一个具体的例子,当不使用指针的时候,在执行任务的时候有个配置项:
1414

@@ -32,79 +32,51 @@ type Config struct {
3232

3333
```
3434

35-
但是有时候这个值就是一个字面值常量传进去的,这个时候如果要获取指针类型的话就有点麻烦,上面这个场景只是举了一个例子,这个模块就是用来解决类似的问题的。
35+
但是有时候这个值就是一个字面值常量传进去的,比如查询数据库时的分页大小等,这个时候如果要获取指针类型的话就有点麻烦,上面这个场景只是举了一个例子,这个模块就是用来解决类似的问题的。
3636

37-
目前支持的数据类型:
37+
# 三、Example Code
3838

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+
目前已经支持泛型:
6540

6641
```go
42+
package main
6743

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+
}
10678
```
107-
79+
10880

10981

11082

example/bool_example.go

-50
This file was deleted.

example/byte_example.go

-35
This file was deleted.

example/complex128_example.go

-1
This file was deleted.

example/complex64_example.go

-1
This file was deleted.

example/example_test.go

-9
This file was deleted.

example/float32_example.go

-1
This file was deleted.

example/float64_example.go

-1
This file was deleted.

example/int16_example.go

-40
This file was deleted.

example/int32_example.go

-40
This file was deleted.

example/int64_example.go

-40
This file was deleted.

0 commit comments

Comments
 (0)