Di GO, fungsi init()
adalah fungsi khas yang dipanggil secara automatik apabila pakej diasaskan. Ia digunakan untuk menubuhkan keadaan awal pakej atau melaksanakan kod yang perlu dijalankan sebelum program utama bermula. Fungsi init()
biasanya digunakan untuk tugas permulaan seperti menubuhkan pembolehubah, mendaftarkan sambungan pangkalan data, atau memulakan struktur data.
Fungsi init()
tidak mengambil sebarang argumen dan tidak mengembalikan sebarang nilai. Ia mempunyai tandatangan berikut:
<code class="go">func init() { // Initialization code here }</code>
Satu perkara penting yang perlu diperhatikan ialah fungsi init()
tidak diperlukan untuk hadir dalam setiap pakej. Sekiranya ada, ia akan dipanggil secara automatik oleh runtime Go.
Fungsi init()
dalam GO biasanya digunakan untuk pelbagai tugas inisialisasi. Beberapa kes penggunaan yang paling biasa termasuk:
Menetapkan pembolehubah global : Fungsi init()
boleh digunakan untuk memulakan pembolehubah global kepada nilai permulaan mereka. Sebagai contoh, menubuhkan objek konfigurasi global atau memulakan peta atau kepingan global.
<code class="go">var globalConfig Config func init() { globalConfig = LoadConfig() }</code>
Mendaftarkan Sambungan Pangkalan Data : Ia sering digunakan untuk mewujudkan sambungan ke pangkalan data atau perkhidmatan luaran lain yang perlu disediakan sepanjang pelaksanaan program.
<code class="go">var db *sql.DB func init() { var err error db, err = sql.Open("drivername", "username:password@tcp(localhost:5432)/dbname") if err != nil { log.Fatal(err) } }</code>
Inisialisasi Struktur Data : Fungsi init()
boleh digunakan untuk memulakan struktur data kompleks atau mengisi data yang akan digunakan oleh bahagian lain program.
<code class="go">var dataMap map[string]int func init() { dataMap = make(map[string]int) dataMap["value1"] = 10 dataMap["value2"] = 20 }</code>
Mendaftarkan fungsi atau cangkuk : Ia boleh digunakan untuk mendaftarkan fungsi atau cangkuk yang merupakan sebahagian daripada sistem plugin atau rangka kerja.
<code class="go">func init() { RegisterHandler("/path", handleFunc) }</code>
Fungsi init()
dalam GO dilaksanakan secara automatik oleh runtime GO apabila pakej dimulakan. Perintah pelaksanaan init()
fungsi mengikuti peraturan tertentu:
A
pakej import B
, B
akan dimulakan sebelum A
.init()
berfungsi dalam satu pakej : Jika pakej mengandungi pelbagai fungsi init()
, mereka akan dilaksanakan mengikut urutan yang diisytiharkan dalam fail sumber. Jika fungsi init()
tersebar di pelbagai fail dalam pakej yang sama, urutan pelaksanaan ditentukan oleh urutan leksikografi nama fail sumber.main()
: Semua fungsi init()
dilaksanakan sebelum fungsi main()
program bermula. Ini memastikan bahawa semua permulaan yang diperlukan selesai sebelum pelaksanaan utama program bermula.Berikut adalah contoh mudah untuk menggambarkan susunan pelaksanaan:
<code class="go">// main.go package main import ( "fmt" "./packageA" "./packageB" ) func main() { fmt.Println("Main function") } // packageA/a.go package packageA import "fmt" func init() { fmt.Println("Package A init") } // packageB/b.go package packageB import ( "fmt" "./packageA" ) func init() { fmt.Println("Package B init") }</code>
Apabila program ini dijalankan, output akan menjadi:
<code>Package A init Package B init Main function</code>
Ini menunjukkan bahawa packageA
diasaskan sebelum packageB
kerana packageB
mengimport packageA
, dan kedua -duanya diasaskan sebelum fungsi main()
dipanggil.
Ya, fungsi init()
boleh digunakan beberapa kali dalam satu pakej Go. Sekiranya terdapat pelbagai init()
dalam pakej, mereka akan dilaksanakan mengikut urutan yang diisytiharkan dalam fail sumber. Jika fungsi init()
tersebar di pelbagai fail dalam pakej yang sama, urutan pelaksanaan ditentukan oleh urutan leksikografi nama fail sumber.
Berikut adalah contoh menggunakan pelbagai fungsi init()
dalam pakej yang sama:
<code class="go">// file1.go package mypackage import "fmt" func init() { fmt.Println("First init function in file1.go") } // file2.go package mypackage import "fmt" func init() { fmt.Println("First init function in file2.go") } func init() { fmt.Println("Second init function in file2.go") }</code>
Dalam contoh ini, fungsi init()
akan dilaksanakan mengikut urutan berikut:
init()
di file1.go
init()
di file2.go
init()
kedua dalam file2.go
Ini membolehkan inisialisasi modular komponen yang berbeza dalam pakej yang sama, memberikan fleksibiliti bagaimana pakej disediakan sebelum digunakan.
Atas ialah kandungan terperinci Apakah fungsi init () dalam GO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!