Golang特殊init函數(shù)的實(shí)現(xiàn)實(shí)例
介紹
init()函數(shù)是一個(gè)特殊的函數(shù),存在一下特性
- 不能被其它函數(shù)調(diào)用,而是子main()函數(shù)之前自動(dòng)調(diào)用
- 不能作為參數(shù)傳入
- 不能有傳入?yún)?shù)和返回值
作用:
- 對(duì)變量進(jìn)行初始化
- 檢查/修復(fù)程序狀態(tài)
- 注冊(cè)
- 運(yùn)行一次計(jì)算
以下是<<the way to go>>的解釋:
變量除了可以在全局聲明中初始化,也可以在 init ()函數(shù)中初始化。這是一類非常特殊的函數(shù),它不能夠被人為調(diào)用,而是在每個(gè)包完成初始化后自動(dòng)執(zhí)行,并且執(zhí)行優(yōu)先級(jí)比 main 函數(shù)高。
每個(gè)源文件都只能包含一個(gè) init() 函數(shù)(此處存在錯(cuò)誤)。初始化總是以單線程執(zhí)行,并且按照包的依賴關(guān)系順序執(zhí)行。
使用
- 每個(gè)源文件都可以包含多個(gè)init()函數(shù)

- 導(dǎo)入包的順序決定了init函數(shù)的執(zhí)行順序
go中不同包中init函數(shù)的執(zhí)行順序是根據(jù)包的導(dǎo)入關(guān)系決定。

init函數(shù)調(diào)用關(guān)系:圖片來源網(wǎng)絡(luò)

場(chǎng)景
對(duì)變量進(jìn)行初始化
package main
import (
"math"
)
var pi float64
func init() {
pi = 4 * math.Atan(1)
}- 在程序開始前,調(diào)用后臺(tái)執(zhí)行g(shù)oroutine
package main
func init() {
go backend()
}- 連接數(shù)據(jù)庫
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
)
var Db *sqlx.DB
func init() {
database, err := sqlx.Open("mysql", "root:xxx@tcp(127.0.0.1:3306)/test")
if err != nil {
fmt.Println("open mysql fail", err)
return
}
Db = database
}到此這篇關(guān)于Golang特殊init函數(shù)的實(shí)現(xiàn)實(shí)例的文章就介紹到這了,更多相關(guān)Golang特殊init函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
15個(gè)Golang中時(shí)間處理的實(shí)用函數(shù)
在Go編程中,處理日期和時(shí)間是一項(xiàng)常見任務(wù),涉及到精確性和靈活性,本文將介紹一系列實(shí)用函數(shù),它們充當(dāng)time包的包裝器,需要的可以參考下2024-01-01
Golang 發(fā)送http請(qǐng)求時(shí)設(shè)置header的實(shí)現(xiàn)
這篇文章主要介紹了Golang 發(fā)送http請(qǐng)求時(shí)設(shè)置header的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Windows環(huán)境下vscode-go安裝筆記(不支持32位)
這篇文章主要介紹了Windows環(huán)境下vscode-go安裝筆記(不支持32位),需要的朋友可以參考下2017-02-02
淺談Golang 切片(slice)擴(kuò)容機(jī)制的原理
我們知道 Golang 切片在容量不足的情況下會(huì)進(jìn)行擴(kuò)容,擴(kuò)容的原理是怎樣的呢,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
使用Go實(shí)現(xiàn)郵箱驗(yàn)證碼API功能
本文將帶你了解一個(gè)項(xiàng)目如何實(shí)現(xiàn)一個(gè)郵箱驗(yàn)證接口,即一個(gè)可用的發(fā)送郵箱驗(yàn)證碼API和驗(yàn)證驗(yàn)證碼是否正確功能,對(duì)Go實(shí)現(xiàn)郵箱驗(yàn)證碼API詳細(xì)過程感興趣的朋友一起看看吧2024-06-06
golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)現(xiàn)
這篇文章主要為大家介紹了golang架構(gòu)設(shè)計(jì)開閉原則手寫實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
go中結(jié)構(gòu)體切片的實(shí)現(xiàn)示例
Go語言中的結(jié)構(gòu)體切片是一種結(jié)合了結(jié)構(gòu)體和切片特點(diǎn)的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)和操作多個(gè)結(jié)構(gòu)體實(shí)例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-11-11
Go語言實(shí)現(xiàn)AES加密并編寫一個(gè)命令行應(yīng)用程序
密碼學(xué)中的高級(jí)加密標(biāo)準(zhǔn)(Advanced Encryption Standard,AES),又稱Rijndael加密法,是經(jīng)常采用的一種區(qū)塊加密標(biāo)準(zhǔn)。本文就來用Go語言實(shí)現(xiàn)AES加密算法,需要的可以參考一下2023-02-02

