Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Modul Go Mengendalikan Pakej Dalaman untuk Menghalang Import Luaran?

Bagaimanakah Modul Go Mengendalikan Pakej Dalaman untuk Menghalang Import Luaran?

Patricia Arquette
Patricia Arquetteasal
2024-12-10 04:44:09396semak imbas

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

Organisasi Kod Go dengan Pakej Dalaman

Memahami Pakej Dalaman

Pakej dalaman, dilambangkan dengan direktori "dalaman" , bertujuan untuk mengumpulkan kod berkaitan yang tidak sepatutnya didedahkan di luar projek. Dalam modul Go, pakej dalaman tidak boleh diimport oleh projek luaran.

Struktur Modul

Dalam contoh yang disediakan, struktur projek adalah seperti berikut:

project/
  internal/
    foo/
      foo.go  # package foo
    bar/
      bar.go  # package bar
  main.go

di mana main.go mengimport projek pakej dalaman/dalaman/foo dan project/internal/bar.

Import Isu

Isu yang anda hadapi semasa cuba mengimport pakej dalaman dari luar direktori projek. Pakej dalaman hanya boleh diimport dari dalam projek yang sama, jadi menggunakan projek laluan/dalaman/foo dan projek/dalaman/bar dari main.go tidak akan berfungsi.

Penyelesaian dengan Modul Go

Walau bagaimanapun, dengan pengenalan modul Go dalam Go v1.11, anda tidak lagi perlu menentukan laluan projek anda dalam $GOPATH/src. Buat fail go.mod dan tentukan modul pakej dalaman seperti berikut:

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

Kunci Mata

  • Pakej dalaman dihadkan untuk digunakan dalam projek yang sama.
  • Modul Go menyediakan cara untuk menstruktur projek dengan pakej dalaman menggunakan fail go.mod dan menggantikan arahan.
  • Versi dalam memerlukan dan menggantikan tidak menjejaskan fungsi, selagi pakej ditemui dalam yang betul lokasi.

Atas ialah kandungan terperinci Bagaimanakah Modul Go Mengendalikan Pakej Dalaman untuk Menghalang Import Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn