最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Go init函數(shù)詳解

init()函數(shù)會在每個包完成初始化后自動執(zhí)行,并且執(zhí)行優(yōu)先級比main函數(shù)高。init 函數(shù)通常被用來:

  • 對變量進行初始化
  • 檢查/修復程序的狀態(tài)
  • 注冊
  • 運行一次計算

包的初始化

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

  • 初始化導入的包(遞歸導入)
  • 對包塊中聲明的變量進行計算和分配初始值
  • 執(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í)行結果

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

即使包被導入多次,初始化只需要一次。

特性

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

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

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

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

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

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

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

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
  }
}

因為上面代碼中不可能用for循環(huán)來作為precomputed的值(這是一句聲明),因此可以用init函數(shù)來解決這個問題。

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

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

import _ "image/png"

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • golang進程在docker中OOM后hang住問題解析

    golang進程在docker中OOM后hang住問題解析

    這篇文章主要介紹了golang進程在docker中OOM后hang住問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Go庫text與template包使用示例詳解

    Go庫text與template包使用示例詳解

    這篇文章主要為大家介紹了Go庫text與template包使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • go語言字符串的拼接和切片方法總結

    go語言字符串的拼接和切片方法總結

    在go語言中,因為字符串只能被訪問,不能被修改,所以進行字符串拼接的時候,golang都需要進行內存拷貝,造成一定的性能消耗,這篇文章主要給大家介紹了關于go語言字符串的拼接和切片的相關資料,需要的朋友可以參考下
    2022-11-11
  • Golang中函數(shù)的使用方法詳解

    Golang中函數(shù)的使用方法詳解

    這篇文章主要詳細介紹了Golang中函數(shù)的使用方法,文中有詳細的示例代碼,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Go語言并發(fā)編程 互斥鎖詳情

    Go語言并發(fā)編程 互斥鎖詳情

    在并發(fā)編程中,多個Goroutine訪問同一塊內存資源時可能會出現(xiàn)競態(tài)條件,我們需要在臨界區(qū)中使用適當?shù)耐讲僮鱽硪员苊飧倯B(tài)條件。Go 語言中提供了很多同步工具,本文將介紹互斥鎖Mutex和讀寫鎖RWMutex的使用方法。
    2021-10-10
  • Go安裝和環(huán)境配置圖文教程

    Go安裝和環(huán)境配置圖文教程

    本文主要介紹了Go安裝和環(huán)境配置圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 小學生也能看懂的Golang異常處理recover panic

    小學生也能看懂的Golang異常處理recover panic

    在其他語言里,宕機往往以異常的形式存在,底層拋出異常,上層邏輯通過 try/catch 機制捕獲異常,沒有被捕獲的嚴重異常會導致宕機,go語言追求簡潔,優(yōu)雅,Go語言不支持傳統(tǒng)的 try…catch…finally 這種異常
    2021-09-09
  • Go返回int64類型字段超出javascript Number范圍的解決方法

    Go返回int64類型字段超出javascript Number范圍的解決方法

    這篇文章主要介紹了Go返回int64類型字段超出javascript Number范圍的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 深入探索Go語言中的高效數(shù)據(jù)結構堆

    深入探索Go語言中的高效數(shù)據(jù)結構堆

    堆,作為一種基本的數(shù)據(jù)結構,以其在優(yōu)先隊列和排序算法中提供高效解決方案的能力而聞名。在本文中,我們將深入探討堆的內部工作原理,包括其特性、實現(xiàn)細節(jié)以及在現(xiàn)代編程中的應用
    2008-06-06
  • golang文件讀取-按指定BUFF大小讀取方式

    golang文件讀取-按指定BUFF大小讀取方式

    這篇文章主要介紹了golang文件讀取-按指定BUFF大小讀取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

宁化县| 新化县| 延边| 盈江县| 利川市| 邯郸市| 铜陵市| 壤塘县| 壤塘县| 丹阳市| 顺昌县| 南乐县| 阿坝| 尖扎县| 右玉县| 武强县| 抚松县| 吉林市| 曲麻莱县| 满洲里市| 河南省| 安泽县| 田阳县| 衢州市| 金平| 昌乐县| 根河市| 河津市| 灵宝市| 正宁县| 嘉定区| 米易县| 新营市| 高州市| 台山市| 河间市| 镶黄旗| 高青县| 雷州市| 滦平县| 威远县|