tools.aw_id
tools.aw_id/src/main.go
.. v1.r202504.1 . Переезд на go 1.23 + Новый тип версий. Теперь можно всю версию генерировать автоматом. Уникальность осуществляется за счёт точности в 0.01 секунды.
| 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 } |