Dalam bahasa Go, anda boleh mengimport pakej melalui pernyataan import Nama pakej yang diimport dikelilingi oleh petikan berganda Nama pakej ialah laluan yang dikira bermula dari GOPATH, dan menggunakan "/" untuk memisahkan laluan. Terdapat dua format asas untuk mengimport pakej: 1. Sintaks import satu baris "import "bao1" import "bao2"" 2. Sintaks import berbilang baris "import("bao1" "bao2" ...)".
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Pakej import bahasa Go - menggunakan kod lain dalam kod
boleh dilakukan selepas pernyataan pengisytiharan pakej fail sumber bahasa Go, Mengandungi sifar atau lebih banyak pernyataan pengisytiharan pakej import sebelum pernyataan pengisytiharan bukan import yang lain. Setiap penyataan import boleh menentukan laluan import secara individu, atau berbilang laluan import boleh diimport serentak melalui kurungan. Untuk merujuk pengecam pakej lain, anda boleh menggunakan kata kunci import Nama pakej yang diimport dikelilingi oleh petikan berganda Nama pakej ialah laluan yang dikira bermula dari GOPATH dan dipisahkan oleh /.
Kaedah penulisan import lalai
Terdapat dua format asas untuk import, iaitu import satu baris dan import berbilang baris Kesan kod import kedua-duanya kaedah import adalah sama.
1) Import satu baris
Format import satu baris adalah seperti berikut:
import "包1" import "包2"
2) Import berbilang baris
Apabila mengimport dalam berbilang baris, nama pakej berada dalam Pesanan dalam import tidak menjejaskan kesan import Formatnya adalah seperti berikut:
import( "包1" "包2" … )
Sesuaikan nama pakej yang dirujuk selepas mengimport. pakej
Jika kita Jika anda ingin mengimport dua pakej dengan nama yang sama pada masa yang sama, seperti pakej matematik/rand dan pakej crypto/rand, penyata import mesti tentukan nama pakej baharu untuk sekurang-kurangnya satu pakej dengan nama yang sama untuk mengelakkan konflik. Ini dipanggil menamakan semula pakej yang diimport.
import ( "crypto/rand" mrand "math/rand" // 将名称替换为mrand避免冲突 )
Penamakan semula pakej yang diimport hanya mempengaruhi fail sumber semasa. Jika fail sumber lain mengimport pakej yang sama, mereka boleh menggunakan nama lalai asal bagi pakej yang diimport atau menamakan semula kepada nama lain yang sama sekali berbeza.
Import penamaan semula pakej ialah ciri yang berguna untuk lebih daripada sekadar menyelesaikan konflik nama. Jika nama pakej yang diimport sukar digunakan, terutamanya dalam beberapa kod yang dijana secara automatik, mungkin lebih mudah untuk menggunakan nama pendek. Apabila memilih untuk menamakan semula pakej yang diimport dengan nama pendek, yang terbaik adalah konsisten untuk mengelakkan kekeliruan dalam nama pakej. Memilih nama pakej lain juga boleh membantu mengelakkan konflik dengan nama pembolehubah biasa setempat. Sebagai contoh, jika sudah ada pembolehubah bernama laluan dalam fail, maka kita boleh menamakan semula pakej standard "laluan" kepada pathpkg.
Setiap pernyataan pengisytiharan import secara eksplisit menyatakan hubungan pergantungan antara pakej semasa dan pakej yang diimport. Jika anda menghadapi gelung import pakej, alat binaan bahasa Go akan melaporkan ralat.
Pakej import tanpa nama - hanya import pakej tetapi jangan gunakan jenis dan nilai dalam pakej
Jika anda hanya ingin mengimport pakej tanpa menggunakan sebarang Apabila anda tidak memanggil sebarang fungsi dalam pakej, anda boleh menggunakan import tanpa nama untuk mengimport pakej Formatnya adalah seperti berikut:
import ( _ "path/to/package" )
Antaranya, laluan/ke. /package mewakili nama pakej yang akan diimport, seperti berikut: Melukis garis _ bermaksud mengimport pakej tanpa nama.
Pakej yang diimport tanpa nama akan disusun ke dalam fail boleh laku sama seperti pakej import yang lain Pada masa yang sama, pakej yang diimport juga akan mencetuskan panggilan fungsi init().
Entri permulaan pakej sebelum program bermula: init
Dalam reka bentuk beberapa keperluan, rujukan program perlu dipanggil seragam apabila program dimulakan Jika anda perlu memanggil fungsi inisialisasi secara manual oleh pembangun, ralat atau ketinggalan mungkin berlaku dalam proses ini. Kami berharap dalam pakej yang dirujuk, penulis pakej akan dimaklumkan tentang permulaan kod dan melakukan beberapa kerja permulaan untuk kod dalam pakejnya sendiri apabila program bermula.
Sebagai contoh, untuk meningkatkan kecekapan pelaksanaan perpustakaan matematik untuk mengira fungsi trigonometri, nilai fungsi trigonometri boleh dibina ke dalam jadual indeks dalam ingatan terlebih dahulu apabila program dimulakan, dan program luaran dengan cepat boleh mendapatkan nilai fungsi trigonometri dengan melihat nilai jadual. Walau bagaimanapun, panggilan ke fungsi permulaan jadual indeks fungsi trigonometri tidak dijangka akan dipanggil oleh setiap pembangun yang menggunakan fungsi trigonometri secara luaran Jika terdapat mekanisme dalam pakej fungsi trigonometri yang boleh memberitahu bila program pakej fungsi trigonometri bermula. maka masalah permulaan dapat diselesaikan.
Bahasa Go menyediakan ciri yang sangat mudah untuk masalah di atas: fungsi init().
Ciri-ciri fungsi init() adalah seperti berikut:
Setiap kod sumber boleh menggunakan 1 fungsi init().
Fungsi init() akan dipanggil secara automatik sebelum atur cara dilaksanakan (sebelum fungsi main() dilaksanakan).
Arahan panggilan adalah untuk pakej yang dirujuk dalam main(), dimulakan dalam susunan mendalam-dahulu.
Sebagai contoh, andaikan terdapat hubungan rujukan pakej sedemikian: main→A→B→C, maka perintah panggilan fungsi init() bagi pakej ini ialah:
C.init→B.init→A.init→main
Penerangan:
Tertib panggilan berbilang fungsi init() dalam pakej yang sama tidak dapat diramalkan.
fungsi init() tidak boleh dipanggil oleh fungsi lain.
理解包导入后的init()函数初始化顺序
Go 语言包会从 main 包开始检查其引用的所有包,每个包也可能包含其他的包。Go 编译器由此构建出一个树状的包引用关系,再根据引用顺序决定编译顺序,依次编译这些包的代码。
在运行时,被最后导入的包会最先初始化并调用 init() 函数。
通过下面的代码理解包的初始化顺序。
代码8-3 包导入初始化顺序入口(…/chapter08/pkginit/main.go)
package main import "chapter08/code8-2/pkg1" func main() { pkg1.ExecPkg1() }
代码说明如下:
第 3 行,导入 pkg1 包。
第 7 行,调用 pkg1 包的 ExecPkg1() 函数。
代码8-4 包导入初始化顺序pkg1(…/chapter08/pkginit/pkg1/pkg1.go)
package pkg1 import ( "chapter08/code8-2/pkg2" "fmt" ) func ExecPkg1() { fmt.Println("ExecPkg1") pkg2.ExecPkg2() } func init() { fmt.Println("pkg1 init") }
代码说明如下:
第 4 行,导入 pkg2 包。
第 8 行,声明 ExecPkg1() 函数。
第 12 行,调用 pkg2 包的 ExecPkg2() 函数。
第 15 行,在 pkg1 包初始化时,打印 pkg1 init。
代码8-5 包导入初始化顺序pkg2(…/chapter08/pkginit/pkg2/pkg2.go)
package pkg2 import "fmt" func ExecPkg2() { fmt.Println("ExecPkg2") } func init() { fmt.Println("pkg2 init") }
代码说明如下:
第 5 行,声明 ExecPkg2() 函数。
第 10 行,在 pkg2 包初始化时,打印 pkg2 init。
执行代码,输出如下:
pkg2 init pkg1 init ExecPkg1 ExecPkg2
Atas ialah kandungan terperinci Cara mengimport pakej dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!