无法导入proto文件

时间:2018-06-18 03:57:00

标签: go protocol-buffers

我花了好几个小时尝试阅读有关如何在Golang中使用简单原型文件的博客。我生成了.pb.go文件。所有的互联网示例都是从一些随机"github...网址导入进行原型导入的。我无法找到有关如何导入与我的.go文件或diff目录在同一目录中的简单原型文件的任何示例。如何使用本地文件系统中的原型文件。

go build hello.go
hello.go:5:2: cannot find package "customer" in any of:
    /usr/local/go/src/customer (from $GOROOT)
    /Users/myhomedir/go/src/customer (from $GOPATH)

$ SOME_DIR / customer

hello.go的提示
package main

import  (
    "fmt"
    pb "customer"
)

func main() {
    fmt.Println("hello test message\n")
}

customer.proto

的内容
syntax = "proto3";
package customer;


// The Customer service definition.
service Customer {
  // Get all Customers with filter - A server-to-client streaming RPC.
  rpc GetCustomers(CustomerFilter) returns (stream CustomerRequest) {}
  // Create a new Customer - A simple RPC
  rpc CreateCustomer (CustomerRequest) returns (CustomerResponse) {}
}

// Request message for creating a new customer
message CustomerRequest {
  int32 id = 1;  // Unique ID number for a Customer.
  string name = 2;
  string email = 3;
  string phone= 4;

  message Address {
    string street = 1;
    string city = 2;
    string state = 3;
    string zip = 4;
    bool isShippingAddress = 5;
  }

  repeated Address addresses = 5;
}

message CustomerResponse {
  int32 id = 1;
  bool success = 2;
}
message CustomerFilter {
  string keyword = 1;
}

2 个答案:

答案 0 :(得分:1)

只需将客户代码放在一个目录中,然后像打包一样将其导入

package main
import "$SOME_DIR/customer"

答案 1 :(得分:1)

正如已经提到的一些评论一样,您必须像导入其他文件一样导入customer文件-带有完整的类似url的路径。即使您的main.go与依赖项位于同一目录中也是如此。 每个人都有一种特定的方式来管理go代码依赖关系,您可以在此处阅读有关它的信息:

How to write go code

遵循一个如何组织工作空间的通用标准确实感到很奇怪(至少对我来说,这是我刚开始使用go时所做的)-但是由于您遇到了像您这样的错误,如果您不遵循它们的话;只是尝试做。

一个不错的起点(在您阅读了“如何编写go代码”之后)实际上就是您收到的错误消息。如果您更改导入语句/目录结构,它将更改,并且将帮助您在import ...语句中指定依赖项的完整路径。