There is no reason for the bit to be set on these files. And this is a
minor annoyance for me. On my system `ls` colors executable files by
default and it was needlessly destracting in this case.
Making xtob take two byte arguments avoids a lot of slicing. This makes
the Parse function faster. In addition, because so much slicing is
avoiding, duplicating the parse logic to ParseBytes resulted in the
function being faster than Parse (<1ns).
The BenchmarkParseBytesNative function has been removed (parseBytes was
identical to ParseBytes). And a new benchmark,
BenchmarkParseBytesUnsafe, has been added to benchmark the old way of
parsing []byte (which is slightly slower than Parse and thus the new
ParseBytes implementation).
benchmark old ns/op new ns/op delta
BenchmarkUUID_MarshalJSON-4 685 667 -2.63%
BenchmarkUUID_UnmarshalJSON-4 1145 1162 +1.48%
BenchmarkParse-4 61.6 56.5 -8.28%
BenchmarkParseBytes-4 65.7 55.9 -14.92%
BenchmarkParseBytesCopy-4 121 115 -4.96%
BenchmarkNew-4 1665 1643 -1.32%
BenchmarkUUID_String-4 112 113 +0.89%
BenchmarkUUID_URN-4 117 119 +1.71%
benchmark old allocs new allocs delta
BenchmarkUUID_MarshalJSON-4 4 4 +0.00%
BenchmarkUUID_UnmarshalJSON-4 2 2 +0.00%
BenchmarkParse-4 0 0 +0.00%
BenchmarkParseBytes-4 0 0 +0.00%
BenchmarkParseBytesCopy-4 1 1 +0.00%
BenchmarkNew-4 1 1 +0.00%
BenchmarkUUID_String-4 1 1 +0.00%
BenchmarkUUID_URN-4 1 1 +0.00%
benchmark old bytes new bytes delta
BenchmarkUUID_MarshalJSON-4 248 248 +0.00%
BenchmarkUUID_UnmarshalJSON-4 248 248 +0.00%
BenchmarkParse-4 0 0 +0.00%
BenchmarkParseBytes-4 0 0 +0.00%
BenchmarkParseBytesCopy-4 48 48 +0.00%
BenchmarkNew-4 16 16 +0.00%
BenchmarkUUID_String-4 48 48 +0.00%
BenchmarkUUID_URN-4 48 48 +0.00%
The MustParse and MustNewUUID functions have been removed since they
can be replaced simply using the new function.
uuid.Must(uuid.Parse(s))
uuid.Must(uuid.NewUUID())
This also fixes a spurious bug in the UnmarshalJSON method that
prevented compiling the json.go file.