Ich versuche, ein benutzerdefiniertes Paket in Go zu erstellen und zu verwenden. Es ist wahrscheinlich etwas sehr Offensichtliches, aber ich kann nicht viele Informationen darüber finden. Grundsätzlich habe ich diese beiden Dateien im selben Ordner:
mylib.go
package mylib
type SomeType struct {
}
main.go
package main
import (
"mylib"
)
func main() {
}
Wenn ich es versuche go run main.go
, erhalte ich folgende Fehlermeldung:
main.go:4:2: import "mylib": cannot find package
Ich habe versucht, go build mylib.go
zuerst auszuführen, aber es scheint nichts zu tun (keine Datei generiert, keine Fehlermeldung). Also eine Idee, wie ich das machen könnte?
go install
das Verzeichnismylib
zuerst aus und versuchen Sie es erneut.Antworten:
Lesen und verstehen Sie zunächst das Dokument "So schreiben Sie Go-Code" .
Die tatsächliche Antwort hängt von der Art Ihres "benutzerdefinierten Pakets" ab.
Wenn es von allgemeinem Nutzen sein soll, sollten Sie das sogenannte "Github-Code-Layout" verwenden . Grundsätzlich machen Sie Ihre Bibliothek zu einem separaten
go get
Tabellenprojekt.Wenn Ihre Bibliothek für den internen Gebrauch bestimmt ist, können Sie folgendermaßen vorgehen:
Demonstrieren:
Jetzt, in der obersten Ebene
main.go
, könnten Sieimport "myproject/mylib"
und es würde OK funktionieren.quelle
mylib
in den Code vonmyproject2
? Dann lautet die Antwort "mithilfe vonimport "myproject/mylib"
- die Idee ist, dass Go nach importierten Pfaden in jedem Verzeichnis sucht, das es aus derGOPATH
Umgebungsvariablen extrahiert (sie werden als" Arbeitsbereiche "bezeichnet), aber diese Suche ist (zum Glück) nicht rekursiv, also sind solche Pfade effektiv an ihren jeweiligen Arbeitsplätzen "verankert".go mod
Entwicklungen ist jedoch möglicherweise ein Modul die Antwort (undgo mod
unterstützt auch das Vendoring von Modulen).Für diese Art von Ordnerstruktur:
Der einfachste Weg ist, dies zu verwenden:
quelle
foo/mylib
(vorausgesetzt, der Ordner mit main.go istfoo
).go install
Pause macht . Wenn Sie ein eigenständiges Projektgo build
erstellen, das heruntergeladen und ausgeführt werden soll , ist dies in Ordnung. Ich würde jedoch das oben erwähnte "Github-Code-Layout" verwenden (auch wenn es sich nicht um Bitbucket oder ähnliches handelt), wenn Sie vollego install
Unterstützung wünschen .Für ein auf GitHub gehostetes Projekt tun die Leute normalerweise Folgendes:
mylib.go
main.go
quelle
Ich bin ein erfahrener Programmierer, aber ganz neu in der Go-Welt! Und ich gebe zu, ich hatte nur wenige Schwierigkeiten, Go zu verstehen ... Ich hatte das gleiche Problem, als ich versuchte, meine go-Dateien in Unterordnern zu organisieren. So wie ich es gemacht habe:
GO_Directory (dasjenige, das $ GOPATH zugewiesen ist)
In der Datei MyProject \ Entities \ Fiboo \ Client.go
in der Datei MyProject \ main.go
(Ich verwende Go 1.9 unter Ubuntu 16.04)
Und denk dran, ich bin ein Neuling auf Go. Wenn das, was ich tue, schlechte Praxis ist, lass es mich wissen!
quelle
eine andere Lösung: zu $ GOPATH
hinzufügen
src/myproject
.Dann
import "mylib"
wird kompiliert.quelle