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
또는 module
import 문과 관련하여 상대 경로가 필요하다는 것 입니다. 에서 어디에 있는지에 따라 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
과 같은 특정 패키지를 가져옵니다 .platform
otherModule
import "github.com/userName/otherModule/platform"
여기의 부드러운 도입 Golang 모듈은