web-dev-qa-db-fra.com

Accéder aux paquets locaux dans un module go (go 1.11)

J'essaie le nouveau système de modules de Go et je ne parviens pas à accéder aux packages locaux. Le projet suivant est dans un dossier sur mon bureau en dehors de mon gopath.

Ma structure de projet ressemble à:

/
  - /platform
      - platform.go
  - main.go
  - go.mod

// platform.go
package platform

import "fmt"

func Print() {
    fmt.Println("Hi")
}

// main.go
package main

import "platform"

func main() {
    platform.Print()
}

go build main.go me dit

cannot find module for path platform
32
David Alsh

Je vous suggère fortement d'utiliser la chaîne d'outils go qui prend en charge ces problèmes immédiatement. Le code Visual Studio avec le plug-in vscode-go est vraiment utile.

Le problème ici est que Go nécessite des chemins relatifs par rapport à votre instruction $GOPATH/src ou module dans l'import. Selon l'endroit où vous vous trouvez dans votre GOPATH, le chemin d'importation doit également l'inclure. Dans ce cas, l'instruction d'importation doit inclure le chemin du module go dans go.mod

GOPATH

Supposons que votre projet réside ici:

$GOPATH/src/github.com/myuser/myproject

Votre chemin d'importation devrait être:

import "github.com/myuser/myproject/platform"

VGO

Supposons que votre fichier go.mod est:

module example.com/myuser/myproject

Votre chemin d'importation devrait être:

import "example.com/myuser/myproject/platform"
24
Halil Kaskavalci

Permettez-moi de définir ce premier modules sont des collections de packages. Dans Go 11, j'utilise modules go comme suit:

Si les deux packages sont dans le même projet, vous pouvez simplement procéder comme suit: Dans go.mod:

module github.com/userName/moduleName

et à l'intérieur de votre main.go

import "github.com/userName/moduleName/platform"

Toutefois, s’il s’agit de modules distincts, c’est-à-dire différents chemins physiques et que vous souhaitez toujours importer le fichier local packages sans le publier à distance dans github, par exemple, vous pouvez utiliser la directive replace.

Étant donné le nom du module github.com/otherModule et platform, comme vous l'avez appelé, est le seul paquet à l'intérieur. Dans le go.mod de votre module principal, ajoutez les lignes suivantes:

module github.com/userName/mainModule

require "github.com/userName/otherModule" v0.0.0
replace "github.com/userName/otherModule" v0.0.0 => "local physical path to the otherModule"

Remarque: le chemin doit pointer vers le répertoire racine du module et peut être absolu ou relatif.

Dans main.go, pour importer un package spécifique tel que platform à partir de otherModule:

import "github.com/userName/otherModule/platform"

Voici une introduction douce aux modules de Golang

22
Muhammad Soliman