Я пытаюсь создать и использовать пользовательский пакет в Go. Возможно, это что-то очень очевидное, но я не могу найти много информации об этом. По сути, у меня есть эти два файла в одной папке:
mylib.go
package mylib
type SomeType struct {
}
main.go
package main
import (
"mylib"
)
func main() {
}
Когда я пытаюсь go run main.go
, я получаю эту ошибку:
main.go:4:2: import "mylib": cannot find package
go build mylib.go
Сначала я попытался запустить, но, похоже, ничего не происходит (файл не создан, нет сообщения об ошибке). Так есть идеи, как я мог это сделать?
go install
под каталогомmylib
first и попробуйте снова.Ответы:
Во-первых, обязательно прочитайте и поймите документ «Как написать код Go» .
Фактический ответ зависит от характера вашей "пользовательской упаковки".
Если он предназначен для общего пользования, рассмотрите возможность использования так называемой «компоновки кода Github» . По сути, вы делаете свою библиотеку отдельным
go get
проектом.Если ваша библиотека для внутреннего использования, вы можете пойти так:
Демонстрировать:
Теперь, на верхнем уровне
main.go
, вы могли бы,import "myproject/mylib"
и это будет работать нормально.источник
mylib
в кодmyproject2
? Тогда ответ «с помощьюimport "myproject/mylib"
- идея состоит в том, что Go ищет импортированные пути в каждом каталоге, который он извлекает изGOPATH
переменной среды (они называются« рабочими пространствами »), но этот поиск (к счастью) не является рекурсивным, поэтому такие пути эффективно "закреплены" на соответствующих рабочихgo mod
разработками, модуль может быть ответом (и такжеgo mod
поддерживает вендорство модулей).Для этого вида структуры папок:
Самый простой способ - использовать это:
источник
foo/mylib
(при условии, что папка, содержащая main.go isfoo
).go install
перерыв. Если вы создаете автономный проект, который вы хотите, чтобы люди загружали и запускалиgo build
, это нормально - однако я бы использовал упомянутую выше «разметку кода Github» (даже если она не в битбакете или аналогична), если вам нужна полнаяgo install
поддержка ,Для проекта, размещенного на GitHub, вот что обычно делают люди:
mylib.go
main.go
источник
Я опытный программист, но совершенно новый в мире Go! И, признаюсь, я столкнулся с несколькими трудностями в понимании Go ... Я столкнулся с той же проблемой, когда пытался упорядочить файлы go в подпапках. Как я это сделал:
GO_Directory (тот, который назначен в $ GOPATH)
На файл MyProject \ Entities \ Fiboo \ Client.go
в файле MyProject \ main.go
(Я использую Go 1.9 в Ubuntu 16.04)
И помните, ребята, я новичок на Go. Если то, что я делаю, - плохая практика, дайте мне знать!
источник
другое решение:
добавьте
src/myproject
к $ GOPATH.Потом
import "mylib"
скомпилирую.источник
Я пробую так много способов, но лучше всего я использую go.mod и ставлю
а затем я импортирую из того же проекта, который я использую
Очень полезно создавать проект в любом месте
источник