首頁 後端開發 Golang go語言的init()方法有什麼用

go語言的init()方法有什麼用

Jan 07, 2023 pm 12:07 PM
golang go語言 init()

在go語言中,init()方法用於套件的初始化;初始化每個套件後,會自動執行init()函數,並且執行優先權高於主函數的執行優先權。 init()方法通常用於:1、變數初始化;2、檢查/修復狀態;3、註冊器;4、運行計算。 init()函數在程式運行時,自動自動被呼叫執行,不能在程式碼中主動呼叫它。不同包的init函數依照包導入的依賴關係決定該初始化函數的執行順序。

go語言的init()方法有什麼用

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

Go init函數的詳細說明

#go語言中init函數用於套件(package)的初始化,該函數是go語言的一個重要特性

程式執行時導入包語句會自動觸發包內部init()函數的呼叫。

初始化每個套件後,會自動執行init()函數,並且執行優先權高於主函數的執行優先權。

要注意的是:init()函數沒有參數,也沒有回傳值。

init函數通常用於:

  • 變數初始化
  • 檢查/修復狀態
  • 註冊器
  • #執行計算

init()函數在程式運行時,自動自動被呼叫執行,不能在程式碼中主動呼叫它。

套件初始化執行的順序如下圖所示:

go語言的init()方法有什麼用

結果是:

10
Hello 沙河
登入後複製

init()函數有下面的特點:

  • init函數是用來執行前做套件的初始化的函數,例如初始化套件裡的變數等

  • 每個套件可以擁有多個init函數

  • 套件的每個原始檔案也可以擁有多個init函數

  • 同一個套件中多個init函數的執行順序go語言沒有明確的定義(說明)

  • 不同套件的init函數按照套件導入的依賴關係決定該初始化函數的執行順序

  • init函數不能被其他函數調用,而是在main函數執行之前,自動被調用

#套件初始化

  • ##為了使用導入的程式包,必須先對其進行初始化。初始化始終在單一執行緒中執行,並且以程式包依賴關係的順序執行。這由Golang的運行時系統控制,如下圖所示:
  • 初始化導入的包(遞歸導入)

計算並為區塊中聲明的變數分配初始值go語言的init()方法有什麼用

在套件中執行初始化函數

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 --->")
}
登入後複製
執行結果
function s() —>
init function —>
main —>
登入後複製
即使套件被多次導入,初始化也只需要一次。

特性介紹

init函數不需要傳入參數,也不需要傳回任何值。與main相比,init沒有聲明,因此無法引用。

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}
登入後複製

編譯上述函數「

undefined:init

」時發生錯誤。

每個原始檔案可以包含一個以上的init函數,請記住,寫在每個原始檔案中的「行進方式」只能包含一個init函數,這有點不同,因此進行下一個驗證。

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/* 实施结果:
init1
init2
main */
登入後複製

從上面的範例中,您可以看到每個來源檔案可以包含多個init函數。

初始化函數的一個常見範例是設定初始表達式的值。

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迴圈用作預先計算的值,所以可以使用init函數來解決此問題。

Go套件匯入規則的副作用

#Go非常嚴格,不允許引用未使用的軟體包。但是有時您引用套件只是為了呼叫init函數進行一些初始化。空標識符(即下劃線)的目的是解決此問題。

import _ "image/png"
登入後複製
【相關推薦:###Go影片教學###、###程式設計教學###】###

以上是go語言的init()方法有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言中用於浮點數運算的庫有哪些? Go語言中用於浮點數運算的庫有哪些? Apr 02, 2025 pm 02:06 PM

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go的爬蟲Colly中Queue線程的問題是什麼? Go的爬蟲Colly中Queue線程的問題是什麼? Apr 02, 2025 pm 02:09 PM

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? 在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? Apr 02, 2025 pm 02:03 PM

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

GoLand中自定義結構體標籤不顯示怎麼辦? GoLand中自定義結構體標籤不顯示怎麼辦? Apr 02, 2025 pm 05:09 PM

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

Golang的目的:建立高效且可擴展的系統 Golang的目的:建立高效且可擴展的系統 Apr 09, 2025 pm 05:17 PM

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? 在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? Apr 02, 2025 pm 05:03 PM

Go編程中的資源管理:Mysql和Redis的連接與釋放在學習Go編程過程中,如何正確管理資源,特別是與數據庫和緩存�...

See all articles