Ich bin oft begeistert, wenn ich an einen anderen Ort als "$ GOPATH" importiere. Das liegt daran, dass es die folgenden Muster gibt.
Sortieren Sie für jedes dieser Elemente, wie unterschiedlich der Import ist. (GO-Version wird als 1.14 angenommen)
Wenn ich den Umriss der Schlussfolgerung schreibe, sieht es wie folgt aus
$ GOPATH / src$ GOPATH / pkg / modDer GOPATH-Modus und der Modulmodus wechseln je nach Vorhandensein oder Nichtvorhandensein der Datei "go.mod"
go.mod-Datei fehltgo.mod-Datei (** Sie ist auch dann gültig, wenn sich go.mod in der Hierarchie über dem auszuführenden Verzeichnis befindet **)Verzeichnisaufbau
.
└── main.go
main.go
package main
import (
	"fmt"
	"github.com/antonholmquist/jason" //Externe Pakete importieren
)
func main() {
	v, _ := jason.NewObjectFromBytes([]byte(`{"Name": "fetaro"}`))
	fmt.Println(v)
}
$GOPATH/src/
Insbesondere "$ GOPATH / src / github.com / antonholmquist / jason"
Paket kann nicht gefunden Fehler
main.go:5:2: cannot find package "github.com/antonholmquist/jason" in any of:
	/usr/local/Cellar/go/1.14.3/libexec/src/github.com/antonholmquist/jason (from $GOROOT)
	/Users/tetsutaro.watanabe/go/src/github.com/antonholmquist/jason (from $GOPATH)
go get
Insbesondere "go get github.com / antonholmquist / jason"
Verzeichnisaufbau
.
├── go.mod ←go.Da ich die Mod-Datei abgelegt habe, geht sie in den Modulmodus
└── main.go
main.go
package main
import (
	"fmt"
	"github.com/antonholmquist/jason" //Externe Pakete importieren
)
func main() {
	v, _ := jason.NewObjectFromBytes([]byte(`{"Name": "fetaro"}`))
	fmt.Println(v)
}
go.mod
module hoge
go 1.14
$GOPATH/pkg/mod
Insbesondere /Users/tetsutaro.watanabe/go/pkg/mod/github.com/antonholmquist/jason \ @ v1.0.0 /
Es wird ohne Erlaubnis heruntergeladen.
Wenn Sie "go main.go" ausführen, während es noch nicht heruntergeladen wurde, wird es heruntergeladen und dann wie unten gezeigt ausgeführt.
$ go run main.go
go: finding module for package github.com/antonholmquist/jason
go: found github.com/antonholmquist/jason in github.com/antonholmquist/jason v1.0.0 ← Ergebnis herunterladen
{"Name":"fetaro"}← Ausführungsergebnis
Nach dem Herunterladen wird go.mod neu geschrieben
Umgeschrieben go.mod
module hoge
go 1.14
require github.com/antonholmquist/jason v1.0.0 // indirect
Verzeichnisaufbau
.
├── main.go
└── mypkg ← Internes Paket
    └── bar.go
main.go
package main
import (
	"./mypkg" //Interne Pakete importieren
)
func main() {
	mypkg.PrintBar()
}
bar.go
package mypkg
import "fmt"
func PrintBar(){
	fmt.Println("bar")
}
. / mypkg mit einem relativen Pfad von main.go
Paket kann nicht gefunden Fehler
main.go:4:2: cannot find package "." in:
	/Users/tetsutaro.watanabe/git/golab3/mypkg
Verzeichnisaufbau
.
├── go.mod ←go.Modulmodus, weil es einen Mod gibt
├── main.go
└── mypkg ← Interne Bibliothek
    └── bar.go
main.go
package main
import (
	"mymodule/mypkg" //← geh hier.Modulname geschrieben in mod+Machen Sie daraus einen Paketnamen
)
func main() {
	mypkg.PrintBar()
}
go.mod
module mymodule
go 1.14
bar.go
package mypkg
import "fmt"
func PrintBar(){
	fmt.Println("bar")
}
Das ist schwierig. Im Modulmodus ist das beim Import angegebene "mymodule / mypkg" eine Verkettung eines Moduls und eines Pakets.
Insbesondere suchen Sie nach (Modulname in go.mod beschrieben) + (relativer Pfad des Pakets vom Speicherort von go.mod).
In diesem Beispiel ist "mymodule" das Modul und "/ mypkg" der relative Pfad aus dem Verzeichnis, das "go.mod with module mymodule" enthält.
Erhalten Sie einen Fehler
main.go:4:2: package mymodule/mypkg is not in GOROOT (/usr/local/Cellar/go/1.14.3/libexec/src/mymodule/mypkg)
Fall, in dem go.mod höher als main.go ist
Zum Beispiel im Fall der folgenden Verzeichnisstruktur
.
├── c_pkg
│   ├── d_pkg
│   │   └── bar.go
│   └── main.go
└── go.mod
Wenn Sie in go.mod module a_module / b_module angeben,
In main.go kann es mit "import" a_module / b_module / c_pkg / d_pkg "" gelesen werden
Allgemeine cmd- und interne Konfigurationen
.
├── cmd
│   └── main.go
├── go.mod
└── internal
    └── lib.go
go.mod
module github.com/fetaro/my_module
go 1.14
main.go
package main
import (
    "github.com/fetaro/my_module/internal"
)
func main() {
    internal.PrintHoge()
}
lib.go
package internal
import "fmt"
func PrintHoge(){
    fmt.Println("hoge")
}
Recommended Posts