Доступ к локальным пакетам в модуле go (go 1.11) - PullRequest
0 голосов
/ 26 августа 2018

Я пробую новую систему модулей Go и у меня проблемы с доступом к локальным пакетам.Следующий проект находится в папке на моем рабочем столе за пределами моего gopath.

Структура моего проекта выглядит следующим образом:

/
  - /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говорит мне

cannot find module for path platform

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Позвольте мне определить это первым modules являются коллекциями packages. В Go 11 я использую go модули , как показано ниже:

Если оба пакета находятся в одном проекте, вы можете просто сделать следующее: В go.mod:

module github.com/userName/moduleName

и внутри вашего main.go

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

Однако, если они являются отдельными модулями, то есть разными физическими путями, и вы все еще хотите импортировать локальный packages, не публикуя его, например, на github, вы можете достичь этого с помощью директивы replace.

Учитывая имя модуля github.com/otherModule и platform, как вы его назвали, это единственный пакет внутри. В go.mod вашего основного модуля добавьте следующие строки:

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"

Примечание. Путь должен указывать на корневой каталог модуля и может быть абсолютным или относительным.

Внутри main.go, для импорта определенного пакета, например platform из otherModule:

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

Вот нежное введение в модули Голанга

0 голосов
/ 26 августа 2018

Я настоятельно рекомендую вам использовать go toolchain, который решает эти проблемы из коробки. Visual Studio Code с плагином vscode-go действительно полезен.

Проблема здесь в том, что Go требует относительных путей относительно вашего $GOPATH/src или module в операторе импорта. В зависимости от того, где вы находитесь в GOPATH, путь импорта также должен включать это. В этом случае в операторе импорта должен быть указан путь модуля go в go.mod

GOPATH

Предположим, ваш проект находится здесь:

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

Ваш путь импорта должен быть:

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

ВГО

Предположим, ваш файл go.mod:

module example.com/myuser/myproject

Ваш путь импорта должен быть:

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