tools.aw_id

Yohn Y. 2025-04-09 Parent:05d07cc3040d Child:223ba01da43a

11:3a967e85c0ca Go to Latest

tools.aw_id/src/main.go

.. v1.r202504.1 . Переезд на go 1.23 + Новый тип версий. Теперь можно всю версию генерировать автоматом. Уникальность осуществляется за счёт точности в 0.01 секунды.

History
1 // devel.a0fs.ru -- aw_id -- v1.r202504.1 //
2 /*
3 Утилиты генерирования полезных в работе ID
4 */
5 package main
7 import (
8 "fmt"
9 "os"
10 "time"
12 "encoding/base64"
13 "encoding/binary"
14 "strconv"
16 "github.com/google/uuid"
17 )
19 const (
20 TIME_ID = iota
21 TIME_HUM
22 TIME_HUM_RU
23 TIME_HUM_SAFE
24 TIME_HUM_SAFE2
25 TIME_ID_SHORT
26 TIME_ID_SHORT2
27 )
29 func get_time_id(id_type int) string {
30 cur_time := time.Now()
31 var time_format string = time.RFC3339
33 switch id_type {
34 case TIME_ID:
35 time_format = "20060102-150405"
36 case TIME_HUM_RU:
37 time_format = "02.01.2006 15:04:05"
38 case TIME_HUM:
39 time_format = "2006-01-02 15:04:05"
40 case TIME_HUM_SAFE:
41 time_format = "2006-01-02 15-04-05"
42 case TIME_HUM_SAFE2:
43 time_format = "2006-01-02_15-04-05"
44 case TIME_ID_SHORT:
45 time_format = "20060102"
46 case TIME_ID_SHORT2:
47 time_format = "200601"
48 }
50 return cur_time.Format(time_format)
51 }
53 func get_uuid() string {
54 res := uuid.New()
55 return res.String()
56 }
58 func get_ver_id() string {
59 return fmt.Sprintf("v0.r%s.1", get_time_id(TIME_ID_SHORT2))
60 }
62 func get_ver_id2() string {
63 return fmt.Sprintf("0.%s.1", get_time_id(TIME_ID_SHORT2))
64 }
66 func get_ver_auto_tag() string {
67 var auto_version string = "AAAAAA"
69 buf := make([]byte, 8)
70 buf_time := time.Now()
71 buf_u64, err := strconv.ParseUint(buf_time.Format("02150405"), 10, 64)
72 if err == nil {
73 buf_u64 = buf_u64*uint64(100) + uint64(buf_time.Nanosecond()/10000000)
74 _, err = binary.Encode(buf, binary.BigEndian, buf_u64)
75 if err == nil {
76 auto_version = base64.RawURLEncoding.EncodeToString(buf[4:])
78 }
79 }
81 return auto_version
82 }
84 func get_ver_id3() string {
85 return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag())
86 }
88 func get_ver_id4() string {
89 return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag())
90 }
92 func prnt_out(k, v string) {
93 fmt.Printf("%10s : %s\n", k, v)
94 }
96 func make_all_ids() {
97 prnt_out("uuid", get_uuid())
98 prnt_out("ts", get_time_id(TIME_ID))
99 prnt_out("tss", get_time_id(TIME_ID_SHORT))
100 prnt_out("tss2", get_time_id(TIME_ID_SHORT2))
101 prnt_out("hr", get_time_id(TIME_HUM))
102 prnt_out("hrr", get_time_id(TIME_HUM_RU))
103 prnt_out("hrs", get_time_id(TIME_HUM_SAFE))
104 prnt_out("hrs2", get_time_id(TIME_HUM_SAFE2))
105 prnt_out("v", get_ver_id())
106 prnt_out("va", get_ver_id3())
107 prnt_out("vs", get_ver_id2())
108 prnt_out("vsa", get_ver_id4())
109 fmt.Println("")
112 func main() {
113 if len(os.Args) > 1 {
114 switch os.Args[1] {
115 case "uuid":
116 fmt.Println(get_uuid())
117 case "ts":
118 fmt.Println(get_time_id(TIME_ID))
119 case "hr":
120 fmt.Println(get_time_id(TIME_HUM))
121 case "hrr":
122 fmt.Println(get_time_id(TIME_HUM_RU))
123 case "hrs":
124 fmt.Println(get_time_id(TIME_HUM_SAFE))
125 case "hrs2":
126 fmt.Println(get_time_id(TIME_HUM_SAFE2))
127 case "tss":
128 fmt.Println(get_time_id(TIME_ID_SHORT))
129 case "tss2":
130 fmt.Println(get_time_id(TIME_ID_SHORT2))
131 case "v":
132 fmt.Println(get_ver_id())
133 case "va":
134 fmt.Println(get_ver_id3())
135 case "vs":
136 fmt.Println(get_ver_id2())
137 case "vsa":
138 fmt.Println(get_ver_id4())
139 default:
140 fmt.Println("Need one of: ")
141 fmt.Println(" uuid, ts, tss, tss2, hr, hrr, hrs, hrs2,")
142 fmt.Println(" v, va, vs, vsa")
144 fmt.Println("")
145 } else {
146 make_all_ids()