欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言init函數(shù)詳解

 更新時(shí)間:2019年04月02日 11:21:54   作者:stpeace  
今天小編就為大家分享一篇關(guān)于Go語(yǔ)言init函數(shù)詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

Go init函數(shù)詳解

init()函數(shù)會(huì)在每個(gè)包完成初始化后自動(dòng)執(zhí)行,并且執(zhí)行優(yōu)先級(jí)比main函數(shù)高。init 函數(shù)通常被用來(lái):

  • 對(duì)變量進(jìn)行初始化
  • 檢查/修復(fù)程序的狀態(tài)
  • 注冊(cè)
  • 運(yùn)行一次計(jì)算

包的初始化

為了使用導(dǎo)入的包,首先必須將其初始化。初始化總是以單線程執(zhí)行,并且按照包的依賴(lài)關(guān)系順序執(zhí)行。這通過(guò)Golang的運(yùn)行時(shí)系統(tǒng)控制,如下圖所示:

  • 初始化導(dǎo)入的包(遞歸導(dǎo)入)
  • 對(duì)包塊中聲明的變量進(jìn)行計(jì)算和分配初始值
  • 執(zhí)行包中的init函數(shù)

initial.go

package main
import "fmt"
var _ int64=s()
func init(){
  fmt.Println("init function --->")
}
func s() int64{
  fmt.Println("function s() --->")
  return 1
}
func main(){
  fmt.Println("main --->")
}

執(zhí)行結(jié)果

function s() --->
init function --->
main --->

即使包被導(dǎo)入多次,初始化只需要一次。

特性

init函數(shù)不需要傳入?yún)?shù),也不會(huì)返回任何值。與main相比而言,init沒(méi)有被聲明,因此也不能被引用。

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}

在編譯上面的函數(shù)時(shí),會(huì)出錯(cuò)“undefined:init”。

每個(gè)源文件中可以包含多個(gè)init函數(shù),記得《the way to go》中寫(xiě)的是每個(gè)源文件只能包含一個(gè)init函數(shù),這有點(diǎn)出入,所以下面驗(yàn)證下。

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/*執(zhí)行結(jié)果:
init1
init2
main */

從上面的例子中,可以看出每個(gè)源文件可以包含多個(gè)init函數(shù)。

init函數(shù)常用的一個(gè)例子就是用來(lái)設(shè)置初始表達(dá)式的值。

var precomputed=[20]float64{}
func init(){
  var current float64=1
  precomputed[0]=current
  for i:=1;i<len(precomputed);i++{
    precomputed[i]=precomputed[i-1]*1.2
  }
}

因?yàn)樯厦娲a中不可能用for循環(huán)來(lái)作為precomputed的值(這是一句聲明),因此可以用init函數(shù)來(lái)解決這個(gè)問(wèn)題。

Go包導(dǎo)入規(guī)則的副作用

Go要求非常嚴(yán)格,不允許引用不使用的包。但是有時(shí)你引用包只是為了調(diào)用init函數(shù)去做一些初始化工作。此時(shí)空標(biāo)識(shí)符(也就是下劃線)的作用就是為了解決這個(gè)問(wèn)題。

import _ "image/png"

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Go語(yǔ)言并發(fā)范式之future模式詳解

    Go語(yǔ)言并發(fā)范式之future模式詳解

    編程中經(jīng)常遇到在一個(gè)流程中需要調(diào)用多個(gè)子調(diào)用的情況,此時(shí)就可以使用Go并發(fā)編程中的future模式,下面小編就來(lái)和大家聊聊future模式的具體使用,需要的可以參考一下
    2023-06-06
  • Go使用Weighted實(shí)現(xiàn)資源管理

    Go使用Weighted實(shí)現(xiàn)資源管理

    這篇文章主要介紹了Go?語(yǔ)言中的?Weighted?并發(fā)原語(yǔ),包括?Weighted?的基本使用方法、實(shí)現(xiàn)原理、使用注意事項(xiàng)等內(nèi)容,感興趣的小伙伴可以了解一下
    2023-06-06
  • Golang中g(shù)orm無(wú)法將字段更新為空值

    Golang中g(shù)orm無(wú)法將字段更新為空值

    本文主要介紹了Golang中g(shù)orm無(wú)法將字段更新為空值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 一文帶你了解Golang中interface的設(shè)計(jì)與實(shí)現(xiàn)

    一文帶你了解Golang中interface的設(shè)計(jì)與實(shí)現(xiàn)

    本文就來(lái)詳細(xì)說(shuō)說(shuō)為什么說(shuō)?接口本質(zhì)是一種自定義類(lèi)型,以及這種自定義類(lèi)型是如何構(gòu)建起?go?的?interface?系統(tǒng)的,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • Go語(yǔ)言單元測(cè)試超詳細(xì)解析

    Go語(yǔ)言單元測(cè)試超詳細(xì)解析

    本文介紹了了Go語(yǔ)言單元測(cè)試超詳細(xì)解析,測(cè)試函數(shù)分為函數(shù)的基本測(cè)試、函數(shù)的組測(cè)試、函數(shù)的子測(cè)試,進(jìn)行基準(zhǔn)測(cè)試時(shí)往往是對(duì)函數(shù)的算法進(jìn)行測(cè)驗(yàn),有時(shí)后一個(gè)算法在測(cè)試數(shù)據(jù)的基量不同時(shí)測(cè)試出的效果會(huì)不同我們需要對(duì)不同數(shù)量級(jí)的樣本進(jìn)行測(cè)試,下文需要的朋友可以參考下
    2022-02-02
  • golang如何設(shè)置Header Content-type

    golang如何設(shè)置Header Content-type

    這篇文章主要介紹了golang如何設(shè)置Header Content-type問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 一文深入探索Go語(yǔ)言中的循環(huán)結(jié)構(gòu)

    一文深入探索Go語(yǔ)言中的循環(huán)結(jié)構(gòu)

    在編程中,循環(huán)結(jié)構(gòu)扮演著重要的角色,它使我們能夠有效地重復(fù)執(zhí)行特定的代碼塊,以實(shí)現(xiàn)各種任務(wù)和邏輯,在Go語(yǔ)言中,for 是 Go 中唯一的循環(huán)結(jié)構(gòu),本文將深入探討Go語(yǔ)言中的for循環(huán)類(lèi)型以及它們的用法
    2023-08-08
  • Go語(yǔ)言題解LeetCode724尋找數(shù)組的中心下標(biāo)

    Go語(yǔ)言題解LeetCode724尋找數(shù)組的中心下標(biāo)

    這篇文章主要為大家介紹了Go語(yǔ)言題解LeetCode724尋找數(shù)組的中心下標(biāo),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語(yǔ)言開(kāi)發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)

    Go語(yǔ)言開(kāi)發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)

    這篇文章主要為大家介紹了Go語(yǔ)言開(kāi)發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 最新評(píng)論