Перейти «не удается найти посылку»

# #go #module #mod

Вопрос:

У меня есть публичное хранилище https://github.com/zhksoftGo/Packet. Я поместил в него несколько общих файлов go. В настоящее время их два.

  Packet.go under github.com/zhksoftGo/Packet
 TypeDefineCactus.go under github.com/zhksoftGo/Packet/protocol/Cactus/
 

Я сталкиваюсь с проблемами при импорте одного из них.

 import "github.com/zhksoftGo/Packet"   // works fine
import "github.com/zhksoftGo/Packet/protocol/Cactus" // "cannot find package"
 

/файл /referer project .mod:

 module github.com/zhksoftGo/SnowWolf

go 1.15

require (
    github.com/gookit/slog v0.1.3
    github.com/panjf2000/gnet v1.4.2
    github.com/smartystreets/goconvey v1.6.4 // indirect
    github.com/zhksoftGo/Packet v0.0.0-20210320131229-5311a044e61f
    gopkg.in/ini.v1 v1.62.0
)
 

Я уже установил GO111MODULE=вкл. Может ли кто-нибудь помочь в этом?

Комментарии:

1. Можете ли вы попробовать добавить replace github.com/zhksoftGo/Packet => /absoule/path/to/your/project в свой файл go.mod, привести его в порядок go mod tidy и снова создать?

2. Я пробовал и не вижу никаких проблем github.com/alessiosavi/StackOverflow/blob/master/Go/66742528/…

3. @zhk_tiger ваш генератор вставляет <U FEFF> (не видно) в начало файла , который разбивает весь пакет.

4. @zhk_tiger вот как выглядит файл, когда я открываю его в vim: скриншот . После удаления символа пробела нулевой ширины , по которому найден пакет go build , хотя программа все еще не компилируется , потому что на многие поля ссылаются без префикса получателя, например mType.Write(pak) , должно быть v.mType.Write(pak) , как только вы исправите эти ошибки, ваш Main2 скомпилируется.

5. @mkopriva Да! Это и есть причина. Этот вопрос смущал меня несколько дней, ты спас мою задницу. Спасибо! Подсказка об ошибке Go нуждается в улучшении. Я программист c/cpp, только недавно учился Go. Этот поход действительно особенный.

Ответ №1:

Основная причина в том, что мой генератор вставляет символы спецификации utf-8 в сгенерированный заголовок файла Go. Это работает, если обычный файл Go импортирует сгенерированный файл Go. Но не работает, если в сгенерированный файл Go импортирован другой сгенерированный файл Go. Поэтому для исходного файла Go нам лучше использовать UTF-8.