2013-05-26 14 views
9

Ich bin neu in Go (aber nicht bei der Programmierung), ich liebe die Sprache, aber ich habe ein wenig Probleme vollständig zu verstehen, wie ich interne Bibliotheken in einer Anwendung machen soll durch Pakete. Als Referenz ist es gut, externe Pakete zu erhalten und dann zu importieren/zu verwenden.Importieren von lokalen Bibliothek und Dateien in einer Anwendung

Sagen wir, ich mache eine Anwendung A.

/home/me/A/a.go (package main) 

Dann merke ich, zu sein a.go zu beginnen ziemlich groß, so schneide ich sie in zwei Teile

/home/me/A/a.go (package main) 
/home/me/A/b.go (package main) 

Wie bin Ich soll b.go von a.go importieren/einbinden, um seine Funktion verfügbar zu machen?

Als Fortsetzung der Frage, in der A bin ich Manipulation viele Objekte O, so denke ich, es wäre viel besser, wenn ich ihnen nur ihr eigenes Paket geben und die Funktionen in einer öffentlichen/exportierten API kapseln . Wie mache ich das ?

Ich habe versucht, ./lib/o.go (Paket o) Erstellen und import lib/o aber ich erhalte immer Fehler wie

./a.go:6: imported and not used: "o" 
./a.go:43: undefined: o 

Ich habe keine GOPATH in meinem env aber ich versuchte export GOPATH=$GOPATH:/home/me/A und es hat nicht das Ergebnis zu ändern.

Ich habe versucht, den Artikel über „go-Layout“, aber es fühlte sich ein wenig zu überwältigend auf einmal und ich würde wirklich gerne eine einfachere Erklärung dieser einen „kleinen“ Schritt Ich versuche zu lesen

zu machen Vielen Dank !

GOPATH/src/me/a/a.go:

package main 

func main() { 
     test() 
} 

GOPATH/src/me/a/test.go:

package main 

import "fmt" 

func test() { 
     fmt.Println("test func !") 
} 

Exec:

$ go run a.go 
# command-line-arguments 
./a.go:4: undefined: test 

EDIT: habe meine Antwort hier: https://groups.google.com/forum/?fromgroups#!topic/golang-nuts/qysy2bM_o1I

E Wenn alle Dateien ausgeführt werden, gehen Sie in den Lauf (go run a.go test.go) oder verwenden Sie go build und führen Sie die resultierende ausführbare Datei aus.

+3

Wenn sich beide Dateien im selben Verzeichnis befinden, bilden sie ein Paket. Es sind keine Importanweisungen erforderlich, um Symbole in verschiedenen Dateien desselben Pakets deklarieren zu lassen. – fuz

+0

@FUZxxl: Können Sie sich das Beispiel anschauen, das ich am Ende meiner Frage hinzugefügt habe? Ich scheine es nicht funktionieren zu lassen, ich schätze, ich mache etwas so offensichtlich falsch, dass es mich überkommt. Danke – user933740

+0

Beantworten Sie mich, aber habe meine Antwort hier: https://groups.google.com/forum/?fromgroups#!topic/golang-nuts/qysy2bM_o1I Listen Sie entweder alle Dateien in go run ('go run a.go test. Go ") oder" go build "verwenden und die resultierende ausführbare Datei ausführen. – user933740

Antwort

1

Sie versuchen, das Go-Buildsystem zu verwenden, ohne die erforderlichen Verzeichnislayouts zu befolgen. Sie werden viel davon profitieren, this document zu lesen.

Kurz gesagt, sind dies WRT die Go-Tool, die Show Stopper:

  • Sie Muss haben eine gültige exportierte GOPATH

  • Paketdateien mit Import-Pfad „example/foo "muss sich im Verzeichnis $GOPATH/src/example/foo befinden.

Weitere Details finden Sie im oben verlinkten Artikel.

+1

Ich bin dem Doc gefolgt und kann meine Bibliothek von der Applikation a mit den Pfaden 'GOPATH/src/a/a.go' und' GOPATH/src/o/o.go' laden, das funktioniert. Vielen Dank ! Allerdings verstehe ich nicht, wie ich eine Datei aus dem gleichen Paket "einbinden" kann, zB wie kann ich aus einer Datei b einbeziehen, die sich in "GOPATH/src/a/b.go" befindet? Dies ist keine Bibliothek, nur eine Trennung von Code in mehreren Dateien. In dem Link, den du gibst, haben sie zwei Dateien im Streak-Paket, wie würde "streak.go" enthalten und "oauth.go" benutzen? – user933740

+0

Siehe meine Info oben. – fuz

+8

Ich verstehe nicht, wie die obige Information die Frage der Verwendung, sagen wir eine Struktur, in einer Datei im selben Verzeichnis wie a.go beantwortet – ryanbillingsley

Verwandte Themen