Open1
Go で SHA512 を扱う
checksum の検証で SHA512 に対応しないといけない
%x base 16, lower-case, two characters per byte
string に変換するには fmt.Sprintf か、 hex.EncodeToString が使える。
ベンチマーク取ったら明らかに hex.EncodeToString のほうが良い
package bench
import (
"crypto/sha512"
"encoding/hex"
"fmt"
"os"
"testing"
)
func Benchmark_Encode(b *testing.B) {
byt, err := os.ReadFile("../asciigraph_0.5.5_Darwin_arm64.tar.gz")
if err != nil {
b.Fatal(err)
}
sum := sha512.Sum512(byt)
b.Run("fmt", func(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = fmt.Sprintf("%x", sum)
}
})
b.Run("hex", func(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = hex.EncodeToString(sum[:])
}
})
}
$ go test -bench . -benchmem
goos: darwin
goarch: arm64
pkg: foo
Benchmark_Encode/fmt-8 3513541 316.6 ns/op 256 B/op 3 allocs/op
Benchmark_Encode/hex-8 14288577 82.02 ns/op 256 B/op 2 allocs/op
PASS
ok foo 3.040s