Импорт Protobuf "не удается найти файл" при использовании Golang1.11 с модулем - PullRequest
0 голосов
/ 09 октября 2018

Я использую Golang 1.11 с поддержкой модулей, поэтому мой проект не вставлен $GOPATH

Я хочу скомпилировать файл proto,

Структура моих файлов

enter image description here


my TaskInfo.proto

syntax = "proto3";
package chaochaogege.filecatcher.common;

option go_package = "common";

import "chaochaogege.com/filecatcher/common/ChunkInfo.proto";

message TaskInfo{
    string name = 1;
    string storePath = 2;
    uint32 workersNum = 3;
    uint32 totalSize = 4;
    repeated chaochaogege.filecatcher.common.ChunkInfo chunkInfo = 5;
}

ChunkInfo.proto

syntax = "proto3";
package chaochaogege.filecatcher.common;

option go_package = "common";

message ChunkInfo{
    uint32 startBytes = 1;
    uint32 endBytes = 2;
    uint32 totalBytes = 3;
    uint32 downloaded = 4;
    uint32 orderId = 5;

}

go.mod

module chaochaogege.com/filecatcher

require (
  github.com/golang/protobuf v1.2.0
)

Когда я запускаю follow (в директории filecatcher / common)

protoc --go_out=./ TaskInfo.proto

protoc сказал:

chaochaogege.com/filecatcher/common/ChunkInfo.proto: File not found.TaskInfo.proto: Import "chaochaogege.com/filecatcher/common/ChunkInfo.proto" was not found or had errors.
TaskInfo.proto:13:14: "chaochaogege.filecatcher.common.ChunkInfo" is notdefined.

Я гуглил, но все вопросы не о модуле go

Я использовал неправильный путь импорта или Мой конфиг неверен?

Если Stackoverflow не может ответить на мой вопрос, я думаюэто ошибкаЯ должен пойти к проблеме Github для отчета ..

1 Ответ

0 голосов
/ 10 октября 2018

Похоже, вы путаете пути

Ваш путь импорта:

import "chaochaogege.com/filecatcher/common/ChunkInfo.proto";

Если вы хотите запустить protoc изнутри filecatcher / common, вам нужночтобы сократить импорт до import "ChunkInfo.proto" и запустить команду, которую вы пытаетесь запустить сейчас.Это будет работать.

Но если вы хотите сохранить оператор импорта таким, какой он есть, вам придется перейти к родительскому каталогу chaochaogege.com и выполнить оттуда следующую команду следующим образом:

protoc -I chaochaogege.com/filecatcher/common/ chaogege.com/filecatcher/common/ChunkInfo.proto --go_out=chaochaogege.com/filecatcher/common/

...