Heim > Backend-Entwicklung > Golang > Problem beim Importieren benutzerdefinierter GoLang-Pakete

Problem beim Importieren benutzerdefinierter GoLang-Pakete

王林
Freigeben: 2024-02-12 21:54:08
nach vorne
918 Leute haben es durchsucht

Problem beim Importieren benutzerdefinierter GoLang-Pakete

php-Editor Xinyi ist hier, um Ihnen ein häufiges Problem in GoLang vorzustellen: das Problem beim Import benutzerdefinierter Pakete. Bei der Go-Sprachentwicklung müssen wir häufig benutzerdefinierte Pakete verwenden, um bestimmte Funktionen zu implementieren. Beim Importieren benutzerdefinierter Pakete treten jedoch manchmal Probleme auf, z. B. das Paket kann nicht gefunden werden, es gibt Konflikte mit dem Paketnamen usw. In diesem Artikel werden diese Fragen ausführlich beantwortet und Lösungen bereitgestellt, die Entwicklern helfen, Probleme beim Import benutzerdefinierter Pakete besser zu bewältigen und die Entwicklungseffizienz zu verbessern.

Frageninhalt

Ich lerne Golang und bin auf ein Problem gestoßen.

Ich habe die Mod-Datei mit go mod init main

erstellt

Als nächstes habe ich die Controller- und Routing-Ordner wie unten gezeigt erstellt:

├── contollers
│   └── users.controller.go
├── routes
│   ├── index.go
│   └── users.routes.go
├── vendor
│   └── modules.txt
├── go.mod
├── go.sum
└── main.go
Nach dem Login kopieren

In der Mod-Datei sieht das Modul so aus 模块main

Wenn ich jetzt versuche, den Controller in den Router zu importieren, erhalte ich einen Importfehler.

Ich habe Folgendes getan. Versuchen Sie es - 1

import (
    "$gopath/controllers"

    "github.com/gin-gonic/gin"
)
Nach dem Login kopieren

Es gibt einen invalid import path: "$gopath/controllers"syntaxFehler

Versuchen Sie es - 2

import (
    "$gopath/main/controllers"

    "github.com/gin-gonic/gin"
)
Nach dem Login kopieren

Gleicher Fehler

Versuchen Sie es - 3

import (
    "main/controllers"

    "github.com/gin-gonic/gin"
)
Nach dem Login kopieren

controller.go

package controllers;

import (
    "fmt"

    "github.com/gin-gonic/gin"
)

func healthcheck() gin.handlerfunc {
    return func (c *gin.context)  {
        fmt.println("reached controller")
    }
}
Nach dem Login kopieren

router.go

package routes

import (
    "bootcamp.com/server/controllers"

    "github.com/gin-gonic/gin"
)

func UserRouters(inComingRoutes *gin.Engine) {
    inComingRoutes.GET("/api/health", controllers.HealthCheck());
}
Nach dem Login kopieren

Wirft einen Fehler wie diesen aus, 无法导入main/controllers(没有必需的模块提供包“main/controllers”)

Ich stecke seit 3-4 Stunden mit diesem Problem fest. Kann mir bitte jemand vorschlagen, wie ich diesen Controller in meine Routen importieren kann?

Vielen Dank im Voraus.

Lösung

  1. Ändern Sie den Modulpfad durch Bearbeiten von go.mod:
- module main
+ module example.com/hello
Nach dem Login kopieren
  • Ändern Sie den Importpfad:
  • import (
    -     "main/controllers"
    +     "example.com/hello/controllers"
    
          "github.com/gin-gonic/gin"
      )
    Nach dem Login kopieren
  • controller.go(删除尾随的 ;):
  • - package controllers;
    + package controllers
    Nach dem Login kopieren
    1. Ändern Sie das Inhaltsverzeichnis contollers 重命名为 controllers 以匹配包名(缺少 r).

    2. Ordner vendor löschen.

    Anleitung:

    1. mainhat in go eine besondere Bedeutung. Zitiert aus der golang-Spezifikation:

    Ein vollständiges Programm wird erstellt, indem ein einzelnes nicht importiertes Paket namens Hauptpaket transitiv mit allen importierten Paketen verknüpft wird. Das Hauptpaket muss den Paketnamen main haben und eine Funktion main deklarieren, die keine Parameter akzeptiert und keinen Wert zurückgibt.

    1. Importpfade ohne Punkte sind für die Standardbibliothek und die Go-Toolchain reserviert. Weitere Informationen finden Sie in der Dokumentation zu cmd/go: Modulnamen ohne Punkte beibehalten .

    Das obige ist der detaillierte Inhalt vonProblem beim Importieren benutzerdefinierter GoLang-Pakete. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:stackoverflow.com
    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
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage