将grpc与最新的appengine sdk(golang 1.4.2)结合使用

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.