Для первого файла все работает, потому что код использует publi c члены пакета ccs08
. Однако это не относится ко второму файлу.
Вы упомянули, что код во втором файле скопирован из здесь .
Чтобы понять, почему код не работает при вставке в основной метод вне пакета ccs08
, вам необходимо понять, что он делает в исходном месте. В частности, эта часть:
var (
result bool
zkrp ccs08
)
В исходном месте (внутри пакета ccs08
) есть частный тип структуры с именем ccs08
. Объявление можно увидеть здесь . Приведенный выше код создает переменную с именем zkrp
, тип которой является частной структурой ccs08
. Затем различные функции, вызываемые для переменной, являются методами, привязанными к этой частной структуре (вы можете увидеть методы здесь ).
Теперь, в опубликованном вами коде (после вставки в местоположение вне пакета ccs08
), нет возможности получить доступ к частной структуре ccs08
(я даже не могу найти метод publi c, который возвращает его в исходном коде zkrp). Итак, то, что Go видит, когда пытается выполнить этот код, является опечаткой (когда он думает, что вы пытаетесь написать что-то в форме package.Member
):
// this looks like you wanted to declare a variable with type:
// "ccs08.SomeType" but forgot to write ".SomeType"
// Thus Go gives the error: "use of package ccs08 without selector"
var zkrp ccs08
И "импортировано, а не used "ошибка связана с тем, что пакет ccs08
нигде в коде недопустимым образом.
Код, который вы скопировали, честно говоря, довольно сбивает с толку из-за повторного использования строк ccs08
и zkrp
для наименования разных вещей. Надеюсь, это немного проясняет ситуацию.