내부 패키지 이해
"내부" 디렉토리로 표시되는 내부 패키지 은 프로젝트 외부에 노출되어서는 안 되는 관련 코드를 그룹화하기 위한 것입니다. Go 모듈에서는 외부 프로젝트에서 내부 패키지를 가져올 수 없습니다.
모듈 구조
제공된 예제에서 프로젝트 구조는 다음과 같습니다.
project/ internal/ foo/ foo.go # package foo bar/ bar.go # package bar main.go
여기서 main.go는 내부 패키지인 project/internal/foo를 가져오고 project/internal/bar.
가져오기 문제
발생한 문제는 프로젝트 디렉터리 외부에서 내부 패키지를 가져오려고 시도하는 것이었습니다. 내부 패키지는 동일한 프로젝트 내에서만 가져올 수 있으므로 main.go에서 project/internal/foo 및 project/internal/bar 경로를 사용하면 작동하지 않습니다.
Go 모듈을 사용한 솔루션
그러나 Go v1.11에 Go 모듈이 도입되면서 더 이상 프로젝트 경로를 지정할 필요가 없습니다. $GOPATH/src. go.mod 파일을 생성하고 다음과 같이 내부 패키지 모듈을 정의합니다.
project/ go.mod main.go \---internal +---bar | bar.go | go.mod | \---foo foo.go go.mod
project/internal/bar/go.mod
module bar go 1.14
project/internal/bar/bar.go
package bar import "fmt" // Bar prints "Hello from Bar" func Bar() { fmt.Println("Hello from Bar") }
project/internal/foo/go.mod
module foo go 1.14
project/internal/foo/foo.go
package foo import "fmt" // Foo prints "Hello from Foo" func Foo() { fmt.Println("Hello from Foo") }
project/main.go
package main import ( "internal/bar" "internal/foo" ) func main() { bar.Bar() foo.Foo() }
project/go.mod
module project go 1.14 require internal/bar v1.0.0 replace internal/bar => ./internal/bar require internal/foo v1.0.0 replace internal/foo => ./internal/foo
키 포인트
위 내용은 Go 모듈은 외부 가져오기를 방지하기 위해 내부 패키지를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!