我正在关注的Protocol Buffer for Go tutorial但我有以下问题:协议缓冲区:找不到包
- 我创建的地址簿协议定义
syntax = "proto3"; package tutorial; message Person { string name = 1; ... }
- 我成功运行编译器并生成代码
- 我尝试导入pb包但失败
这里是什么情况:我指定--go_out
是同我的原定义:(protoc --go_out=. addressbook.proto
)
然后在同一个文件夹中,我创建这些简单的线条test.go:
package main
import "tutorial"
但go build test.go
返回错误:
test.go:3:8: cannot find package "tutorial" in any of:
/usr/local/go/src/tutorial (from $GOROOT)
/home/vagrant/go2/src/tutorial (from $GOPATH)
然后我改变test.go
这样:
package main
import "protobufs/tutorial"
,并得到这个错误:
test.go:3:8: cannot find package "protobufs/tutorial" in any of:
/usr/local/go/src/protobufs/tutorial (from $GOROOT)
/home/vagrant/go2/src/protobufs/tutorial (from $GOPATH)
,但如果我改变了进口只:
package main
import "protobufs"
发现,有一个 “教程” 包在该位置:
test.go:3:8: found packages tutorial (addressbook.pb.go) and main (list_people.go) in /home/vagrant/go2/src/protobufs
我在做什么错?进口应该如何才能完成这项工作?
谢谢!
FYI:我去ENV的一个片段:
GOARCH="amd64"
GOBIN="/home/vagrant/go2/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/vagrant/go2"
GORACE=""
GOROOT="/usr/local/go"
为了让编译好的protobuf可以导入为“tutorial”,需要将'--go_out ='设置为'$ GOPATH/src/tutorial'。 –
是的,这是有效的。谢谢 ! ...似乎我需要阅读更多关于golang的导入,因为我不明白为什么我不能从同一目录导入它 – whyme