英文:
Using grpc with latest appengine sdk (golang 1.4.2)
问题
使用最新的AppEngine SDK,其底层是Go版本1.4.2:
由于依赖于http2,go get google.golang.org/grpc
失败,显然与当前的AppEngine SDK版本不兼容。似乎只有从1.6版本开始才支持http2:
> 从Go 1.6及更高版本开始
(参考:https://godoc.org/golang.org/x/net/http2)
调用 go get golang.org/x/net/http2
无法解决错误。
虽然最初在使用Google Cloud Storage时发现了这个问题,但似乎在整个库中都使用了http2:https://github.com/GoogleCloudPlatform/gcloud-golang/search?utf8=%E2%9C%93&q=grpc
英文:
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
答案1
得分: 2
使用以下命令更新http2包:
go get -u golang.org/x/net/http2
根据go命令的描述(https://golang.org/cmd/go/):
-u标志指示get命令使用网络更新指定的包及其依赖项。默认情况下,get命令使用网络来检查缺失的包,但不使用网络来查找现有包的更新。
英文:
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.
答案2
得分: 0
这似乎是我的本地配置出了问题:
仅供记录...
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
(即一切正常,但是然后...)
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$
英文:
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$
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论