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