У меня есть пакет a, который зависит от внешнего пакета, языковой пакет:
package a
import (
"fmt"
"golang.org/x/text/language"
)
// Machine is a printer
type Machine struct{}
// Printer prints
type Printer interface {
Print(lang language.Tag)
}
// Print prints the language
func (p *Machine) Print(l language.Tag) {
fmt.Println(l.String())
}
Для пакета a я запустил «dep init», а затем «dep обеспечить».
В другом пакете у меня есть файл main.go, который импортирует пакет a:
package main
import (
"testing/a"
"golang.org/x/text/language"
)
func main() {
m := a.Machine{}
m.Print(language.MustParse("en"))
}
Я получаю ошибку:
cannot use "golang.org/x/text/language".MustParse("en") (type "golang.org/x/text/language".Tag) as type "testing/a/vendor/golang.org/x/text/language".Tag in argument to m.Print
Если я положу основной пакет в пакет a, он будет работать нормально. Почему он не работает при вызове из внешнего пакета?
Версия Go - 1.10.2
EDIT:
У меня есть полный контроль над пакетом А, так что я могу изменить способ, которым я продаю вещи там. Я также могу обновить свою версию Go, если есть простое исправление с помощью новой версии Go.
UPDATE:
Я обновился до Go 1.12.1 и удалил существующий каталог vendor. Я запустил "go mod init" и "go mod vendor" для пакета a, но все равно получаю ту же ошибку при запуске main.go в пакете b.
cannot use "testing/b/vendor/golang.org/x/text/language".MustParse("en") (type "testing/b/vendor/golang.org/x/text/language".Tag) as type "testing/a/vendor/golang.org/x/text/language".Tag in argument to m.Print
Если я пытаюсь импортировать полученный пакет напрямую из пакета, я получаю:
use of vendored package not allowed