Проблема вызова локального пакета в основной - PullRequest
0 голосов
/ 26 апреля 2019

Я чувствую, что это, вероятно, слишком заданный вопрос о SO, но здесь он снова.Я считаю эту простую задачу невероятно утомительной в Go.Обратите внимание, что у меня GO11MODULES установлен на ON, я не уверен, влияет ли это на всю систему пакетов (это не то, что я предполагаю).

У меня есть пакет с именем "users", который содержитскомпилированный буфер протокола (из файла .proto).Я хочу сохранить его вместе с рядом других определений в папке с именем protos.Так что моя структура выглядит так:

- main.go
- protos
   - users.go
   - users.proto
   - analytics.go
   - analytics.proto

Довольно простая структура.В файле users.go я определяю package protos.В рамках main.go я бы хотел import users "protos/users".Когда я делаю это, я получаю это: build command-line-arguments: cannot load protos/users: cannot find module providing package protos/users.

Я следовал (я думаю) другому примеру кода, который сделал то же самое.Обратите внимание, что структура папок находится в пределах $GOPATH/src/myapi.

Почему это сложнее, чем оказывается?

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Если вы используете package protos, то пакет protos.protos/users не существует.Пакеты и импорт пакетов находятся на уровне каталогов, а не на уровне файлов.Полный оператор импорта зависит от объявления module в вашем файле go.mod, который определяет корень импорта.Например, если ваш go.mod начинается с

module github.com/me/myapp

, тогда ваш импорт будет

import "github.com/me/myapp/protos"
0 голосов
/ 26 апреля 2019

Этот ответ предполагает, что GO111MODULE включен. Вопрос показывает, что вы устанавливаете GO11MODULES. Я предполагаю, что это опечатка. Исправьте это, если это не типо.

Добавить файл go.mod в тот же каталог, что и main.go, со следующим содержимым:

module myapi

Измените основной на импорт "myapi/protos" вместо "protos/users"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...