>백엔드 개발 >Golang >Go 모듈은 외부 가져오기를 방지하기 위해 내부 패키지를 어떻게 처리합니까?

Go 모듈은 외부 가져오기를 방지하기 위해 내부 패키지를 어떻게 처리합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-10 04:44:09396검색

How Do Go Modules Handle Internal Packages to Prevent External Imports?

내부 패키지로 Go 코드 구성

내부 패키지 이해

"내부" 디렉토리로 표시되는 내부 패키지 은 프로젝트 외부에 노출되어서는 안 되는 관련 코드를 그룹화하기 위한 것입니다. 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 모듈은 go.mod 파일과 교체 지시문을 사용하여 내부 패키지로 프로젝트를 구성하는 방법을 제공합니다.
  • 필요 및 교체 버전 관리는 패키지가 올바른 위치에 있는 한 기능에 영향을 주지 않습니다. 위치.

위 내용은 Go 모듈은 외부 가져오기를 방지하기 위해 내부 패키지를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.