Google-cloud-go: storage: ObjectHandle.Attrs has MD5 value different from gsutil hash cli

Created on 9 Aug 2020  路  2Comments  路  Source: googleapis/google-cloud-go

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

storage needs more info question

All 2 comments

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

Was this page helpful?
0 / 5 - 0 ratings