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
Lepaskan: 2024-12-10 04:44:09
asal
400 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk
project/internal/bar/go.mod
Salin selepas log masuk
module bar

go 1.14
Salin selepas log masuk
project/internal/bar/bar.go
Salin selepas log masuk
package bar

import "fmt"

// Bar prints "Hello from Bar"
func Bar() {
    fmt.Println("Hello from Bar")
}
Salin selepas log masuk
project/internal/foo/go.mod
Salin selepas log masuk
module foo

go 1.14
Salin selepas log masuk
project/internal/foo/foo.go
Salin selepas log masuk
package foo

import "fmt"

// Foo prints "Hello from Foo"
func Foo() {
    fmt.Println("Hello from Foo")
}
Salin selepas log masuk
project/main.go
Salin selepas log masuk
package main

import (
    "internal/bar"
    "internal/foo"
)

func main() {
    bar.Bar()
    foo.Foo()
}
Salin selepas log masuk
project/go.mod
Salin selepas log masuk
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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan