-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
152 lines (131 loc) · 3.8 KB
/
main.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package main
import (
"fmt"
"time"
"github.com/scagogogo/versions"
)
func main() {
// 示例1:排序版本号字符串
fmt.Println("示例1 - 排序版本号字符串:")
versionStrings := []string{
"2.0.0", "1.0.0", "1.10.0", "1.2.0", "1.1.0",
"v3.0.0", "v2.0.0-beta", "1.0.0-alpha",
}
fmt.Println("排序前:")
for i, v := range versionStrings {
fmt.Printf(" %d. %s\n", i+1, v)
}
// 按语义版本顺序排序
sortedVersionStrings := versions.SortVersionStringSlice(versionStrings)
fmt.Println("\n排序后:")
for i, v := range sortedVersionStrings {
fmt.Printf(" %d. %s\n", i+1, v)
}
/*
输出示例:
示例1 - 排序版本号字符串:
排序前:
1. 2.0.0
2. 1.0.0
3. 1.10.0
4. 1.2.0
5. 1.1.0
6. v3.0.0
7. v2.0.0-beta
8. 1.0.0-alpha
排序后:
1. 1.0.0
2. 1.0.0-alpha
3. 1.1.0
4. 1.2.0
5. 1.10.0
6. 2.0.0
7. v2.0.0-beta
8. v3.0.0
*/
// 示例2:排序版本对象
fmt.Println("\n示例2 - 排序版本对象:")
versionObjs := []*versions.Version{
versions.NewVersion("2.0.0"),
versions.NewVersion("1.0.0"),
versions.NewVersion("1.10.0"),
versions.NewVersion("1.2.0"),
versions.NewVersion("1.1.0"),
}
// 为部分版本添加发布时间
versionObjs[1].PublicTime = time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC) // 1.0.0
versionObjs[4].PublicTime = time.Date(2020, 3, 1, 0, 0, 0, 0, time.UTC) // 1.1.0
versionObjs[3].PublicTime = time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC) // 1.2.0
fmt.Println("排序前:")
for i, v := range versionObjs {
timeStr := ""
if !v.PublicTime.IsZero() {
timeStr = fmt.Sprintf(", 发布时间: %s", v.PublicTime.Format("2006-01-02"))
}
fmt.Printf(" %d. %s%s\n", i+1, v.Raw, timeStr)
}
// 排序版本对象切片
sortedVersionObjs := versions.SortVersionSlice(versionObjs)
fmt.Println("\n排序后:")
for i, v := range sortedVersionObjs {
timeStr := ""
if !v.PublicTime.IsZero() {
timeStr = fmt.Sprintf(", 发布时间: %s", v.PublicTime.Format("2006-01-02"))
}
fmt.Printf(" %d. %s%s\n", i+1, v.Raw, timeStr)
}
/*
输出示例:
示例2 - 排序版本对象:
排序前:
1. 2.0.0
2. 1.0.0, 发布时间: 2020-01-01
3. 1.10.0
4. 1.2.0, 发布时间: 2020-02-01
5. 1.1.0, 发布时间: 2020-03-01
排序后:
1. 1.0.0, 发布时间: 2020-01-01
2. 1.1.0, 发布时间: 2020-03-01
3. 1.2.0, 发布时间: 2020-02-01
4. 1.10.0
5. 2.0.0
*/
// 示例3:排序带前缀和后缀的版本
fmt.Println("\n示例3 - 排序带前缀和后缀的版本:")
mixedVersions := []*versions.Version{
versions.NewVersion("1.0.0"),
versions.NewVersion("v1.0.0"),
versions.NewVersion("1.0.0-alpha"),
versions.NewVersion("1.0.0-beta"),
versions.NewVersion("v1.0.0-rc1"),
versions.NewVersion("v1.0.0-rc2"),
}
fmt.Println("排序前:")
for i, v := range mixedVersions {
fmt.Printf(" %d. %s (前缀: '%s', 后缀: '%s')\n", i+1, v.Raw, v.Prefix, v.Suffix)
}
// 排序混合版本
sortedMixedVersions := versions.SortVersionSlice(mixedVersions)
fmt.Println("\n排序后:")
for i, v := range sortedMixedVersions {
fmt.Printf(" %d. %s (前缀: '%s', 后缀: '%s')\n", i+1, v.Raw, v.Prefix, v.Suffix)
}
/*
输出示例:
示例3 - 排序带前缀和后缀的版本:
排序前:
1. 1.0.0 (前缀: '', 后缀: '')
2. v1.0.0 (前缀: 'v', 后缀: '')
3. 1.0.0-alpha (前缀: '', 后缀: '-alpha')
4. 1.0.0-beta (前缀: '', 后缀: '-beta')
5. v1.0.0-rc1 (前缀: 'v', 后缀: '-rc1')
6. v1.0.0-rc2 (前缀: 'v', 后缀: '-rc2')
排序后:
1. 1.0.0 (前缀: '', 后缀: '')
2. 1.0.0-alpha (前缀: '', 后缀: '-alpha')
3. 1.0.0-beta (前缀: '', 后缀: '-beta')
4. v1.0.0 (前缀: 'v', 后缀: '')
5. v1.0.0-rc1 (前缀: 'v', 后缀: '-rc1')
6. v1.0.0-rc2 (前缀: 'v', 后缀: '-rc2')
*/
}