GOLANG DIFF функции предоставляют «неразрешенный тип» - PullRequest
0 голосов
/ 01 мая 2018

Я использую функцию, подобную следующей, которая работает

import (
   "m5/cmd/models"
)

func  TypeCommand(m Modules) string {

…

}

Теперь я хочу изменить

func (m models.Modules) TypeCommand() string {

}

А теперь я получаю сообщение об ошибке «модули неразрешенного типа», почему? первая функция скомпилирована ...

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Нельзя добавлять методы к типам извне пакета, в котором они определены. Если вы действительно чувствуете, что это необходимо, то обходной путь должен определить новый тип, который встраивает импортированный тип и расширяет его. Затем у вас будет тип, который включает в себя все оригинальные методы, а также новый метод:

import (
   "m5/cmd/models"
)

type myModule struct {
    models.Modules
}

func (m myModule) TypeCommand() string {
  // method code here
}

В этом примере myModule будет иметь все экспортируемые поля и методы model.Modules плюс метод TypeCommand().

0 голосов
/ 01 мая 2018

Вы можете определить метод только для типа в том же пакете. Вы не можете определить метод для типа Modules вне пакета models.

С Перейти спецификации на объявления методов :

Получатель указывается в разделе дополнительных параметров, предшествующих имени метода. В этом разделе параметров должен быть объявлен единственный невариантный параметр - получатель. Его тип должен иметь форму T или * T (возможно, с использованием скобок), где T - это имя типа. Тип, обозначаемый T, называется базовым типом получателя; это не должен быть указатель или тип интерфейса, и он должен быть определен в том же пакете, что и метод . Считается, что метод связан с базовым типом, а имя метода отображается только в селекторах типа T или * T.

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