首頁 > 後端開發 > Golang > Go模組如何處理內部套件以防止外部導入?

Go模組如何處理內部套件以防止外部導入?

Patricia Arquette
發布: 2024-12-10 04:44:09
原創
476 人瀏覽過

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

Go 代碼與內部包的組織

理解內部包

內部包,由「internal」目錄表示,旨在將不應在專案外部公開的相關程式碼進行分組。在 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 檔案和替換指令來建立具有內部套件的項目的方法。 require 和replace 中的版本控制不會影響功能,只要在正確的位置找到套件即可地點。

以上是Go模組如何處理內部套件以防止外部導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板