1
0
mirror of https://github.com/google/uuid.git synced 2024-11-24 08:32:23 +02:00
Go package for UUIDs based on RFC 4122 and DCE 1.1: Authentication and Security Services.
Go to file
ayan george 574e687494
fix: Use .EqualFold() to parse urn prefixed UUIDs (#118)
Prior to this commit we used a comparison with the result of ToLower() to test for a "urn:uuid" prefix in both UUID strings and byte slices.

This commit replaces the ToLower and string comparison with both strings.EqualFold and bytes.EqualFold.

This reduces the CPU time across the board for UUIDs that start with "urn:uuid" and eliminates some allocations when parsing bytes.

The benchmark output was generated by adding "urn:uuid" to the test input.

```
goos: linux
goarch: amd64
pkg: github.com/google/uuid
cpu: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
                      │ /tmp/output1 │             /tmp/output2              │
                      │    sec/op    │    sec/op     vs base                 │
Parse-8                 35.87n ± ∞ ¹   33.75n ± ∞ ¹        ~ (p=1.000 n=1) ²
ParseBytes-8            65.10n ± ∞ ¹   35.56n ± ∞ ¹        ~ (p=1.000 n=1) ²
ParseBytesUnsafe-8      35.31n ± ∞ ¹   34.70n ± ∞ ¹        ~ (p=1.000 n=1) ²
ParseBytesCopy-8        78.01n ± ∞ ¹   61.21n ± ∞ ¹        ~ (p=1.000 n=1) ²
ParseBadLength-8        3.499n ± ∞ ¹   3.084n ± ∞ ¹        ~ (p=1.000 n=1) ²
ParseLen32Truncated-8   3.335n ± ∞ ¹   3.334n ± ∞ ¹        ~ (p=1.000 n=1) ²
ParseLen36Corrupted-8   63.02n ± ∞ ¹   58.26n ± ∞ ¹        ~ (p=1.000 n=1) ²
geomean                 24.11n         20.51n        -14.92%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05

                      │ /tmp/output1 │           /tmp/output2           │
                      │     B/op     │    B/op      vs base             │
Parse-8                  0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseBytes-8             16.00 ± ∞ ¹    0.00 ± ∞ ¹  ~ (p=1.000 n=1) ³
ParseBytesUnsafe-8       0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseBytesCopy-8         48.00 ± ∞ ¹   48.00 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseBadLength-8         0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseLen32Truncated-8    0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseLen36Corrupted-8    16.00 ± ∞ ¹   16.00 ± ∞ ¹  ~ (p=1.000 n=1) ²
geomean                            ⁴                ?               ⁴ ⁵
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ need >= 4 samples to detect a difference at alpha level 0.05
⁴ summaries must be >0 to compute geomean
⁵ ratios must be >0 to compute geomean

                      │ /tmp/output1 │           /tmp/output2           │
                      │  allocs/op   │  allocs/op   vs base             │
Parse-8                  0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseBytes-8             1.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ³
ParseBytesUnsafe-8       0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseBytesCopy-8         1.000 ± ∞ ¹   1.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseBadLength-8         0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseLen32Truncated-8    0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
ParseLen36Corrupted-8    1.000 ± ∞ ¹   1.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
geomean                            ⁴                ?               ⁴ ⁵
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ need >= 4 samples to detect a difference at alpha level 0.05
⁴ summaries must be >0 to compute geomean
⁵ ratios must be >0 to compute geomean
```
2023-08-17 21:18:03 +00:00
.github chore(ci): add Action-based tests (#121) 2023-08-16 19:00:26 -05:00
CONTRIBUTING.md Change a UUID from []byte to [16]byte along with other API changes. 2016-02-19 12:30:25 -08:00
CONTRIBUTORS Change a UUID from []byte to [16]byte along with other API changes. 2016-02-19 12:30:25 -08:00
dce.go A little error in the documentation of dce.go 2017-08-12 17:57:52 +01:00
doc.go remove the spurious executable bit from go source files 2016-02-25 22:45:49 -08:00
go.mod add go.mod file 2018-09-17 15:06:12 +02:00
hash.go hash.go hash error covered and linter error fixed (#71) 2021-01-14 18:27:13 -06:00
json_test.go replace Must* funcs with a single generic Must func 2016-02-25 20:56:08 -08:00
LICENSE Move code up one directory 2015-06-03 14:39:07 -07:00
marshal.go refactor (*UUID).UnmarshalText (#58) 2020-05-19 09:17:26 -05:00
node_js.go remove net when targeting JS 2017-11-29 12:54:27 +00:00
node_net.go remove net when targeting JS 2017-11-29 12:54:27 +00:00
node.go Add darkfeline's change to set ifname if no interface is found. 2019-02-27 15:05:49 -06:00
null_test.go Remove TestConformance from null_test.go. It was useful to demonstrate 2021-07-12 17:15:33 -05:00
null.go Minor cleanup. 2021-07-12 17:33:52 -05:00
README.md chore(ci): add Action-based tests (#121) 2023-08-16 19:00:26 -05:00
seq_test.go fix some typos 2017-11-22 06:47:31 +01:00
sql_test.go make 'go vet' happy 2017-11-22 06:14:10 +01:00
sql.go Update sql.go (#72) 2021-01-14 18:24:32 -06:00
time.go make 'go vet' happy 2017-11-22 06:14:10 +01:00
util.go optimize internal parsing function -- avoid unsafe []byte parsing 2016-02-25 21:48:37 -08:00
uuid_test.go Add randomness pool mode for V4 UUID (#80) 2021-07-08 10:05:48 -05:00
uuid.go fix: Use .EqualFold() to parse urn prefixed UUIDs (#118) 2023-08-17 21:18:03 +00:00
version1.go Fix race in NewUUID() (#64) 2020-07-02 13:56:42 -05:00
version4.go Add randomness pool mode for V4 UUID (#80) 2021-07-08 10:05:48 -05:00

uuid

The uuid package generates and inspects UUIDs based on RFC 4122 and DCE 1.1: Authentication and Security Services.

This package is based on the github.com/pborman/uuid package (previously named code.google.com/p/go-uuid). It differs from these earlier packages in that a UUID is a 16 byte array rather than a byte slice. One loss due to this change is the ability to represent an invalid UUID (vs a NIL UUID).

Install

go get github.com/google/uuid

Documentation

GoDoc

Full go doc style documentation for the package can be viewed online without installing this package by using the GoDoc site here: http://pkg.go.dev/github.com/google/uuid