srbemr
srbemr

Reputation: 398

protoc-gen-go: unable to determine Go import path for "simple.proto"

I have simple proto file with following content.

syntax="proto3";

package main;

message Person {
      string name = 1;
      int32 age = 2; 
}

I am trying to generate go code for it using protoc. I run:

protoc --go_out=. simple.proto

I receive following error:

protoc-gen-go: unable to determine Go import path for "simple.proto"

Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.

main.go, go.mod and simple.proto is in the same folder. Both protoc and protoc-gen-go are defined in PATH enviroement.

Upvotes: 24

Views: 37902

Answers (5)

Future Man
Future Man

Reputation: 63

I have a similar problem.

I thought protocol buffers were supposed to be language neutral. If we are adding go_package to the proto files, then if we try to compile these proto files to a different language, we will have to make changes to the files.

The solutions I have seen works if you are looking at generating only go files.

Upvotes: 1

Oscar Gallardo
Oscar Gallardo

Reputation: 2688

Protoc requires that the package be specified, then the solution is to add

option go_package = "./your-package-name";

to make your file looks like the following:

syntax="proto3";

package main;

option go_package = "./your-package-name";

message Person {
      string name = 1;
      int32 age = 2; 
}

then you can run the command e.g:

protoc -I src/ --go_out=src/ src/simple/simple.proto

where --go_out=src/ specifies where your file will be generated then the relative path to your proto file.

Note: Don't forget to prefix the option go_package with ./

Upvotes: 28

blockByblock
blockByblock

Reputation: 416

You are missing option go_package.

The name you will give to option go_package will be the name of the package that will be generated by the protoc. By doing so, you can import thus access message fields.

Upvotes: 12

sk shahriar ahmed raka
sk shahriar ahmed raka

Reputation: 1179

first make sure you installed compiler correctly

sudo apt install protobuf-compiler
sudo apt install golang-goprotobuf-dev

use this command

protoc -I=src/ --go_out=src/ src/simple.proto

-I = IPATH -Specify the directory in which to search for imports
--go_out= output directory

Upvotes: -2

Panji Tri Wahyudi
Panji Tri Wahyudi

Reputation: 512

You forgot to linkedlist the file with it by adding:

option go_package = "./";

You need to linkedlist it first to make it work. It was same issues here

Upvotes: 18

Related Questions