использовать структуру, объявленную в main.go в другом пакете - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть структура, объявленная в main.go, как показано ниже:

type Organization struct {
    ID    string `json:"id"`
    Count int    `json:"count"` //node count
}

У меня есть пакет с именем configuration, и у меня есть такая функция:

func foo(org main.Organization) {

}

проблема в том, что я не могу получить доступ main.Organization.Есть ли способ получить доступ к структуре, объявленной в main.go в другом пакете?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы не можете импортировать основной пакет из других пакетов в go (за исключением определенных ситуаций, таких как тестовый пример).

Вместо этого создайте новый каталог, например с именем mytypes, В этой папке создайтефайл types.go, который будет выглядеть следующим образом:

package mytypes
type Organization struct {
    ID    string `json:"id"`
    Count int    `json:"count"` //node count
}

Где бы вы ни хотели использовать эту структуру, например, в main an, вы import "mytypes" и используете структуру Organization как mytypes.Organization

В качестве альтернативы вы перемещаете структуру Organization в пакет configuration и используете configuration.Organization в своей главной.

0 голосов
/ 20 сентября 2018

Невозможно импортировать package main, за исключением некоторых редких случаев.

Я нашел это объяснение в списке рассылки , датированном прошлым годом.

Однако импорт основного пакета в другой основной пакет работает.Подведем итог:

1) поддерживается импорт основного пакета во внешний тест
2) поддерживается импорт основного пакета в основной пакет
3) импорт основногопакет в неосновном пакете не поддерживается

Это кажется мне разумным, однако AFAIK не задокументировано.

Из спецификации языка

Полная программа создается путем связывания одного, не импортированного пакета, называемого основным, со всеми пакетами, которые он импортирует, транзитивно.Основной пакет должен иметь имя пакета main и объявлять функцию main, которая не принимает аргументов и не возвращает значения.

(выделено в обеих кавычках)

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