Client
Storage
Environment
MacOS
Go Environment
$ go version
go version go1.12.17 darwin/amd64
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/ngocthai.cao/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/ngocthai.cao/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/[email protected]/1.12.17/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/[email protected]/1.12.17/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/2s/jlt8qsnn79lglglhvhsnrm6cb66g92/T/go-build662121660=/tmp/go-build -gno-record-gcc-switches -fno-common"
Code
package main
func main() {
ctx := context.Background()
client, err := storage.NewClient(ctx)
bucketName := "bucket-name-here"
bkt := client.Bucket(bucketName)
objAttrs, err := bkt.Object("path/to/object").Attrs(ctx)
if err != nil {
fmt.Println("Error get attrs")
os.Exit(1)
}
fmt.Printf("%+v\n", objAttrs.MD5)
fmt.Printf("%s\n", objAttrs.MD5)
}
Expected behavior
Value get from running gsutil hash -m
$ gsutil hash -m gs://bucket-name-here/path/to/object
Hashes [base64] for path/to/object:
Hash (crc32c): KXnuoA==
Hash (md5): Cs1P9jN5wnKYL1HojOld7A==
Actual behavior
MD5 got from the go client
[10 205 79 246 51 121 194 114 152 47 81 232 140 233 93 236]
O3yr/Q]
Above is different from Cs1P9jN5wnKYL1HojOld7A== as got from gsutil cli
gsutil values are base64 encoded. Can you try to print fmt.Printf("%s\n", base64.StdEncoding.EncodeToString(objAttrs.MD5)) and see if they match then? That worked for me.
@codyoss That's correct! Thanks