Локальный импорт golang через репозиторий github.com не работает, хотя файлы там есть

Я понимаю, что Go необычен для импорта, но я пробовал следовать соглашению (как мне кажется) до точки, однако я не могу импортировать структуру.

Структура проекта:

/project-name
    /parser/main.go
    /query/main.go
... Project files in root

У меня есть экспортированная структура в /parser/main.go:

package parser
type SomeTranslationStuff struct {
    ID                  int    `json:"Id"`
    Language            string `json:"Language"`
}

Я хочу импортировать это в /query/main.go.

Я так делаю:

import (
    "github.com/org/project-name/parser"
)

Он не импортирует его - я встречал «не могу найти пакет ... в Gopath».

Мой проект существует под: Users\user\go\src\project-name. Импортированный проект (который представляет собой тот же проект, импортированный из github через go get) действительно существует в Users\user\go\src\github.com\org\project-name .. Кажется, все соответствует методу импорта материала "Go", но, похоже, он не импортируется?

В нем конкретно говорится:

Cannot find package name:
C:\Users\user\go\src\github.com\org\project-name\parser(from $GOPATH)

Если я пойду по этому пути, проект будет там! Что дает? Почему не импортируется?

@Flimzy Reading go docs, никогда не следует импортировать с относительными путями. Может я ошибаюсь? Это ответ, который я вижу в большинстве мест, например, на SO. Кроме того, я видел другие проекты с аналогичной структурой, что и я пытаюсь сделать здесь. Идентификатор

cbll 10.09.2018 10:47

Вы говорите, что ваш код находится в Users\user\go\src\project-name. Поэтому вам следует импортировать его как project-name. Если вы импортируете его как github.com/org/project-name, то, как вы можете понять по ошибкам, он будет искать в Users/user/go/src/github.com/org/project-name.

Flimzy 10.09.2018 10:48

Не представляете, что вы имеете в виду, "выдумывая" имена и лгая об их местонахождении? Файлы находятся по правильному пути по отношению к GOPATH, и он экспортируется так, как предполагается ..?

cbll 10.09.2018 10:48

«Мой проект существует в папке: Users \ user \ go \ src \ project-name». Это неверно. Почему вы отклонились от того, что вам сказано в «Как писать код Go»? Разместите свой проект в папке $ GOPATH / github.com / org / project-name. Прекратите бороться с инструментами.

Volker 10.09.2018 10:49

Не надо быть враждебным и грубым ... Я просто просил совета и помощи :)

cbll 10.09.2018 10:49

«Мой пакет называется foo, поэтому я назову его просто github.com/randomstuff/foo» - вот что я имею в виду под «придумыванием имен». Называйте свою посылку настоящим именем - не придумывайте ничего.

Flimzy 10.09.2018 10:50

Отличный материал, спасибо. Между прочим, ваше отношение и @Volker, вероятно, является причиной того, что SO становится кажущейся враждебной. Вы могли бы просто изложить свою точку зрения, не грубо об этом - я просто пытаюсь научиться, правда. Вы активно удерживаете людей от вопросов, будучи грубым, просто чтобы закрепить свою точку зрения .. :)

cbll 10.09.2018 10:53

Я не могу говорить от имени Волкера, но о себе я прихожу в SO, потому что верю в то, что помогу людям стать лучшими программистами. Ответы на вопросы, связанные с кормлением с ложечки, делают это редко. Моя цель - никогда не быть грубым, но иногда ответ на очевидный вопрос очевидным ответом неизбежно кажется грубым. Я виню безличную среду. В этом конкретном случае каждая деталь ответа содержится в вопросе. Также ясно, что вы прочитали документацию, но продолжаете бороться с инструментами. Если мы с Фолькером можем указать на это «менее грубо», я приветствую ваши предложения.

Flimzy 10.09.2018 11:00
2
8
966
1

Ответы 1

В пакете есть две вещи:

  1. А имя. Это установлено декларацией package thename.
  2. Импортироватьдорожка. Этот путь указан относительно $ GOPATH / src.

Вам следует (здесь не спорить) сделать следующее:

  1. имя и последний компонент Импортироватьдорожка должны совпадать. Например. если путь импорта - «солнце / луна / звезды», то имя пакета - «звезды». (Многие люди ошибаются и называют пакет или папку «звездой». Не делайте этого.)

  2. Ваша структура папок на диске должна соответствовать путям импорта вашего пакета. Если путь импорта вашего пакета - «something / random / noise», вы должен поместите его в $ GOPATH / src / something / random / noise. Или наоборот: если ваш код находится в $ GOPATH / src / ill / do / it / my / own / way, то путь импорта пакета "way" будет "ill / do / it / my / own / way". ".

  3. Если вы хотите, чтобы ваш пакет поддерживался go get, разместите его на известном хостинге кода и импортируйте по полному пути импорта. Могут применяться ограничения на путь импорта. Поместите код пакета «foo» в папку $ GOPATH / src / github.com / you / repo / something / deep / folder / structure / foo и импортируйте его с помощью import "github.com/you/repo/whatever/deep/folder/structure/foo".

  4. Все пути и имена пакетов должны быть написаны строчными буквами.

Это сводится к следующему: не делайте ничего необычного, сохраняйте естественность. Путь импорта и структура папок должен совпадают.

Другие вопросы по теме