Próbuję utworzyć i używać niestandardowego pakietu w Go. Prawdopodobnie jest to coś bardzo oczywistego, ale nie mogę znaleźć wielu informacji na ten temat. Zasadniczo mam te dwa pliki w tym samym folderze:
mylib.go
package mylib
type SomeType struct {
}
main.go
package main
import (
"mylib"
)
func main() {
}
Kiedy próbuję go run main.go
, pojawia się ten błąd:
main.go:4:2: import "mylib": cannot find package
Próbowałem go build mylib.go
najpierw uruchomić, ale wydaje się, że nic nie robi (brak wygenerowanego pliku, brak komunikatu o błędzie). Więc masz pomysł, jak mógłbym to zrobić?
go install
w katalogumylib
first i spróbuj ponownie.Odpowiedzi:
Najpierw należy przeczytać i zrozumieć dokument „Jak pisać kod w Go” .
Rzeczywista odpowiedź zależy od charakteru Twojego „niestandardowego pakietu”.
Jeśli ma to być do użytku ogólnego, rozważ zastosowanie tak zwanego „układu kodu Github” . Zasadniczo tworzysz swoją bibliotekę jako oddzielny
go get
projekt tabeli.Jeśli Twoja biblioteka jest do użytku wewnętrznego, możesz zrobić to w następujący sposób:
Aby zademonstrować:
Teraz na najwyższym poziomie
main.go
możeszimport "myproject/mylib"
i będzie dobrze.źródło
mylib
w kodziemyproject2
? Wtedy odpowiedź brzmi "używającimport "myproject/mylib"
- idea jest taka, że Go wyszukuje zaimportowane ścieżki w każdym katalogu, który wyodrębnia zeGOPATH
zmiennej środowiskowej (nazywane są one" obszarami roboczymi "), ale to wyszukiwanie nie jest (na szczęście) rekurencyjne, więc takie ścieżki są skutecznie "zakotwiczone" w swoich miejscach pracygo mod
zmian rozwiązaniem może być moduł (igo mod
obsługuje również sprzedaż modułów).W przypadku tego rodzaju struktury folderów:
Najprostszym sposobem jest użycie tego:
źródło
foo/mylib
(zakładając, że folder zawierający main.go jestfoo
).go install
zerwanie. Jeśli tworzysz samodzielny projekt, który chcesz, aby ludzie mogli go pobierać i uruchamiaćgo build
, jest to w porządku - jednak użyłbym wspomnianego powyżej „układu kodu Github” (nawet jeśli nie jest to Bitbucket lub podobny), jeśli chcesz mieć pełnego install
wsparcie .Oto, co zwykle robią ludzie w przypadku projektu hostowanego na GitHubie
mylib.go
main.go
źródło
Jestem doświadczonym programistą, ale całkiem nowy w świecie Go! I przyznaję, że miałem kilka trudności ze zrozumieniem Go… Napotkałem ten sam problem, próbując uporządkować moje pliki go w podfolderach. Sposób, w jaki to zrobiłem:
GO_Directory (ten przypisany do $ GOPATH)
W pliku MyProject \ Entities \ Fiboo \ Client.go
w pliku MyProject \ main.go
(Używam Go 1.9 na Ubuntu 16.04)
I pamiętajcie, jestem nowicjuszem w Go. Jeśli to, co robię, jest złą praktyką, daj mi znać!
źródło
inne rozwiązanie:
dodaj
src/myproject
do $ GOPATH.Następnie
import "mylib"
skompiluje.źródło