Heim > Backend-Entwicklung > Golang > Wie gehen Go-Module mit internen Paketen um, um externe Importe zu verhindern?

Wie gehen Go-Module mit internen Paketen um, um externe Importe zu verhindern?

Patricia Arquette
Freigeben: 2024-12-10 04:44:09
Original
401 Leute haben es durchsucht

How Do Go Modules Handle Internal Packages to Prevent External Imports?

Organisation von Go-Code mit internen Paketen

Interne Pakete verstehen

Interne Pakete, gekennzeichnet durch das Verzeichnis „internal“. sind zum Gruppieren verwandten Codes gedacht, der nicht außerhalb des Projekts verfügbar gemacht werden sollte. In Go-Modulen können interne Pakete nicht von externen Projekten importiert werden.

Modulstruktur

Im bereitgestellten Beispiel ist die Projektstruktur wie folgt:

project/
  internal/
    foo/
      foo.go  # package foo
    bar/
      bar.go  # package bar
  main.go
Nach dem Login kopieren

wobei main.go die internen Pakete project/internal/foo und importiert project/internal/bar.

Importproblem

Das Problem, auf das Sie gestoßen sind, war der Versuch, interne Pakete von außerhalb des Projektverzeichnisses zu importieren. Interne Pakete können nur aus demselben Projekt importiert werden, daher würde die Verwendung der Pfade project/internal/foo und project/internal/bar aus main.go nicht funktionieren.

Lösung mit Go-Modulen

Mit der Einführung von Go-Modulen in Go v1.11 ist es jedoch nicht mehr notwendig, Ihren Projektpfad in $GOPATH/src anzugeben. Erstellen Sie eine go.mod-Datei und definieren Sie die internen Paketmodule wie folgt:

project/
  go.mod
  main.go
  
\---internal
    +---bar
    |       bar.go
    |       go.mod
    |
    \---foo
            foo.go
            go.mod
Nach dem Login kopieren
project/internal/bar/go.mod
Nach dem Login kopieren
module bar

go 1.14
Nach dem Login kopieren
project/internal/bar/bar.go
Nach dem Login kopieren
package bar

import "fmt"

// Bar prints "Hello from Bar"
func Bar() {
    fmt.Println("Hello from Bar")
}
Nach dem Login kopieren
project/internal/foo/go.mod
Nach dem Login kopieren
module foo

go 1.14
Nach dem Login kopieren
project/internal/foo/foo.go
Nach dem Login kopieren
package foo

import "fmt"

// Foo prints "Hello from Foo"
func Foo() {
    fmt.Println("Hello from Foo")
}
Nach dem Login kopieren
project/main.go
Nach dem Login kopieren
package main

import (
    "internal/bar"
    "internal/foo"
)

func main() {
    bar.Bar()
    foo.Foo()
}
Nach dem Login kopieren
project/go.mod
Nach dem Login kopieren
module project

go 1.14

require internal/bar v1.0.0
replace internal/bar => ./internal/bar
require internal/foo v1.0.0
replace internal/foo => ./internal/foo
Nach dem Login kopieren

Schlüssel Punkte

  • Interne Pakete dürfen nur innerhalb desselben Projekts verwendet werden.
  • Go-Module bieten eine Möglichkeit, Projekte mit internen Paketen mithilfe von go.mod-Dateien und Ersetzungsanweisungen zu strukturieren.
  • Die Versionierung in „Require and Replacement“ hat keinen Einfluss auf die Funktionalität, solange das Paket am richtigen Speicherort gefunden wird.

Das obige ist der detaillierte Inhalt vonWie gehen Go-Module mit internen Paketen um, um externe Importe zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage