[go] go 모듈 내에서 로컬 패키지에 액세스 (go 1.11)

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



답변

이러한 문제를 즉시 처리하는 go 도구 모음을 사용하는 것이 좋습니다. vscode-go 플러그인이있는 Visual Studio Code는 정말 유용합니다.

여기서 문제는 Go에 대해 $GOPATH/src또는 moduleimport 문과 관련하여 상대 경로가 필요하다는 것 입니다. 에서 어디에 있는지에 따라 GOPATH가져 오기 경로에도 포함되어야합니다. 이 경우 import 문은 go 모듈 경로를 포함해야합니다.go.mod

고 패스

프로젝트가 여기에 있다고 가정합니다.

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

가져 오기 경로는 다음과 같아야합니다.

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

VGO

go.mod 파일이 다음과 같다고 가정합니다.

module example.com/myuser/myproject

가져 오기 경로는 다음과 같아야합니다.

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


답변

내가 먼저이를 정의 할 수 modules의 모음입니다 packages. Go 11에서는 다음과 같은 go 모듈을 사용 합니다.

두 패키지가 동일한 프로젝트에있는 경우 다음을 수행 할 수 있습니다. In 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과 같은 특정 패키지를 가져옵니다 .platformotherModule

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

여기의 부드러운 도입 Golang 모듈은


답변