Using latest appengine SDK which is go version 1.4.2 under the hood:
go get google.golang.org/grpc
fails due to dependency on http2 which evidently doesn't work with the current appengine sdk release. Seems http2 stuff is only available only from 1.6+:
from Go 1.6 and later
(ref: https://godoc.org/golang.org/x/net/http2)
calling go get golang.org/x/net/http2
did not fix the errors
While I originally caught this in working with google cloud storage, seems it's used throughout this library: https://github.com/GoogleCloudPlatform/gcloud-golang/search?utf8=%E2%9C%93&q=grpc
This turned out to be an issue with my local configuration somehow:
Just for the record...
davidk-osx:Desktop davidk$ more ~/.bash_profile
export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin export GOPATH=/Users/davidk/Documents/golang export PATH=$GOPATH/bin:$PATH
davidk-osx:Desktop davidk$ go version
go version go1.6 darwin/amd64
davidk-osx:Desktop davidk$ /Applications/go_appengine/goapp version
go version go1.4.2 (appengine-1.9.33) darwin/amd64
davidk-osx:Desktop davidk$ mkdir ./TEMP_GOPATH davidk-osx:Desktop davidk$ export GOPATH=/Users/davidk/Desktop/TEMP_GOPATH davidk-osx:Desktop davidk$ go get google.golang.org/grpc davidk-osx:Desktop davidk$ go get google.golang.org/cloud/storage
(i.e. everything is fine, but then...)
davidk-osx:Desktop davidk$ export GOPATH=/Users/davidk/Documents/golang davidk-osx:Desktop davidk$ go get google.golang.org/grpc
# google.golang.org/grpc/transport ../Documents/golang/src/google.golang.org/grpc/transport/http2_client.go:678: undefined: http2.MetaHeadersFrame ../Documents/golang/src/google.golang.org/grpc/transport/http2_client.go:774: undefined: http2.MetaHeadersFrame ../Documents/golang/src/google.golang.org/grpc/transport/http2_server.go:140: undefined: http2.MetaHeadersFrame ../Documents/golang/src/google.golang.org/grpc/transport/http2_server.go:253: undefined: http2.MetaHeadersFrame ../Documents/golang/src/google.golang.org/grpc/transport/http_util.go:279: f.fr.ReadMetaHeaders undefined (type *http2.Framer has no field or method ReadMetaHeaders) davidk-osx:Desktop davidk$
update the http2 package using
go get -u golang.org/x/net/http2
from the description of go commands (https://golang.org/cmd/go/):
The -u flag instructs get to use the network to update the named packages and their dependencies. By default, get uses the network to check out missing packages but does not use it to look for updates to existing packages.