Skip to content

Commit 469b513

Browse files
committed
防止生成错乱
1 parent aa4b2e4 commit 469b513

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

uuid/uuid.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ import (
1010
"time"
1111
)
1212

13+
const encodeStr = "123456789abcdefghijklmnpqrstuvxy"
14+
1315
var (
14-
seq uint32
15-
buf = make([]byte, 14)
16+
seq uint32
17+
initBuf = make([]byte, 14)
18+
encoding = base32.NewEncoding(encodeStr).WithPadding(base32.NoPadding)
1619
)
1720

1821
func init() {
@@ -22,29 +25,30 @@ func init() {
2225
if !i.IP.IsLoopback() {
2326
i4 := i.IP.To4()
2427
if len(i4) == net.IPv4len {
25-
buf[4] = i.IP.To4()[0]
26-
buf[5] = i.IP.To4()[1]
27-
buf[6] = i.IP.To4()[2]
28-
buf[7] = i.IP.To4()[3]
28+
initBuf[4] = i.IP.To4()[0]
29+
initBuf[5] = i.IP.To4()[1]
30+
initBuf[6] = i.IP.To4()[2]
31+
initBuf[7] = i.IP.To4()[3]
2932
break
3033
}
3134
}
3235
}
3336
}
34-
binary.LittleEndian.PutUint16(buf[8:], uint16(os.Getpid()))
37+
binary.LittleEndian.PutUint16(initBuf[8:], uint16(os.Getpid()))
3538
}
3639

3740
//String 生成字符串的uuid
3841
func String() string {
42+
buf := initBuf[:]
3943
binary.BigEndian.PutUint32(buf[0:], uint32(time.Now().UTC().Unix()))
4044
binary.BigEndian.PutUint32(buf[10:], atomic.AddUint32(&seq, 1))
41-
return base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(buf)
45+
return encoding.EncodeToString(buf)
4246
}
4347

4448
//Decode 解析uuid字符串,返回具体细节.
4549
func Decode(s string) (ip string, pid int, tm time.Time, seq uint32, err error) {
4650
var buf []byte
47-
buf, err = base32.HexEncoding.WithPadding(base32.NoPadding).DecodeString(s)
51+
buf, err = encoding.DecodeString(s)
4852
if err != nil {
4953
return
5054
}

0 commit comments

Comments
 (0)