others-how to solve golang compile: version 'go1.14.2' does not match go tool version 'go1.14' ?

Problem

When we use install golang sdk ,sometimes ,we get this error:

** **memcached-operator** operator-sdk new memcached-operator

INFO[0000] Creating new Go operator 'memcached-operator'. 

INFO[0000] Created go.mod                

INFO[0000] Created tools.go               

INFO[0000] Created cmd/manager/main.go          

INFO[0000] Created build/Dockerfile           

INFO[0000] Created build/bin/entrypoint         

INFO[0000] Created build/bin/user_setup         

INFO[0000] Created deploy/service_account.yaml      

INFO[0000] Created deploy/role.yaml           

INFO[0000] Created deploy/role_binding.yaml       

INFO[0000] Created deploy/operator.yaml         

INFO[0000] Created pkg/apis/apis.go           

INFO[0000] Created pkg/controller/controller.go     

INFO[0000] Created version/version.go          

INFO[0000] Created .gitignore              

INFO[0000] Validating project              

\# math/bits

compile: version "go1.14.2" does not match go tool version "go1.14"

\# unicode/utf8

compile: version "go1.14.2" does not match go tool version "go1.14"

\# internal/race

compile: version "go1.14.2" does not match go tool version "go1.14"

\# unicode

compile: version "go1.14.2" does not match go tool version "go1.14"

\# runtime/internal/sys

compile: version "go1.14.2" does not match go tool version "go1.14"

\# encoding

compile: version "go1.14.2" does not match go tool version "go1.14"

\# unicode/utf16

compile: version "go1.14.2" does not match go tool version "go1.14"

\# internal/nettrace

compile: version "go1.14.2" does not match go tool version "go1.14"

\# crypto/subtle

compile: version "go1.14.2" does not match go tool version "go1.14"

\# container/list

compile: version "go1.14.2" does not match go tool version "go1.14"

\# crypto/internal/subtle

compile: version "go1.14.2" does not match go tool version "go1.14"

\# k8s.io/apimachinery/pkg/selection

compile: version "go1.14.2" does not match go tool version "go1.14"

\# k8s.io/utils/integer

compile: version "go1.14.2" does not match go tool version "go1.14"

\# vendor/golang.org/x/crypto/internal/subtle

compile: version "go1.14.2" does not match go tool version "go1.14"

\# vendor/golang.org/x/crypto/cryptobyte/asn1

compile: version "go1.14.2" does not match go tool version "go1.14"

\# sync/atomic

compile: version "go1.14.2" does not match go tool version "go1.14"

\# golang.org/x/xerrors/internal

compile: version "go1.14.2" does not match go tool version "go1.14"

\# github.com/google/go-cmp/cmp/internal/diff

compile: version "go1.14.2" does not match go tool version "go1.14"

\# github.com/google/go-cmp/cmp/internal/flags

compile: version "go1.14.2" does not match go tool version "go1.14"

\# github.com/go-logr/logr

compile: version "go1.14.2" does not match go tool version "go1.14"

\# runtime/internal/atomic

compile: version "go1.14.2" does not match go tool version "go1.14"

\# k8s.io/utils/buffer

compile: version "go1.14.2" does not match go tool version "go1.14"

\# memcached-operator/memcached-operator/version

compile: version "go1.14.2" does not match go tool version "go1.14"

\# github.com/coreos/prometheus-operator/pkg/apis/monitoring

compile: version "go1.14.2" does not match go tool version "go1.14"

\# internal/cpu

compile: version "go1.14.2" does not match go tool version "go1.14"

\# runtime/cgo

compile: version "go1.14.2" does not match go tool version "go1.14"

Error: failed to exec []string{"go", "build", "./..."}: exit status 2

The core error is :

compile: version "go1.14.2" does not match go tool version "go1.14"

Environment

  • MacOS 10.14
  • Golang go version go1.14 darwin/amd64

Reason

There are two golang versions in my system, we can verify as follows:

➜ /usr/local/go/bin/go version
go version go1.14.2 darwin/amd64

➜ /usr/local/Cellar/go/1.14/libexec/bin/go version
go version go1.14 darwin/amd64

So the problem is located.

Solution

We should change our GOROOT to the 1.14 version of go in my system, e.g. /usr/local/Cellar/go/1.14/libexec

Open .zshrc in my system, and change the GOROOT environment settings as follows:

export GOROOT=/usr/local/Cellar/go/1.14/libexec

Retart the terminal , and verify the go version as follows:

➜  ~ echo $GOROOT
/usr/local/Cellar/go/1.14/libexec
➜  ~ go version
go version go1.14 darwin/amd64
➜  ~ which go
/usr/local/bin/go
➜  ~ ls -l /usr/local/bin/go
lrwxr-xr-x  1 bswen  admin  24 Dec 14 20:36 /usr/local/bin/go -> ../Cellar/go/1.14/bin/go
➜  ~

Re-execute the command :

➜** **memcached-operator** operator-sdk new memcached-operator

INFO[0000] Creating new Go operator 'memcached-operator'. 

INFO[0000] Created go.mod                

INFO[0000] Created tools.go               

INFO[0000] Created cmd/manager/main.go          

INFO[0000] Created build/Dockerfile           

INFO[0000] Created build/bin/entrypoint         

INFO[0000] Created build/bin/user_setup         

INFO[0000] Created deploy/service_account.yaml      

INFO[0000] Created deploy/role.yaml           

INFO[0000] Created deploy/role_binding.yaml       

INFO[0000] Created deploy/operator.yaml         

INFO[0000] Created pkg/apis/apis.go           

INFO[0000] Created pkg/controller/controller.go     

INFO[0000] Created version/version.go          

INFO[0000] Created .gitignore              

INFO[0000] Validating project              

INFO[0018] Project validation successful.        

INFO[0018] Project creation complete.          

**➜** **memcached-operator** 

It works!