Go 常量、init、陣列、型別轉換與斷言、Recover
一、常量
Go中的常量僅僅就是—常量。它們是在編譯時被建立,即使被定義為函式區域性的也如此,並且只能是數字,字元(符文),字串或者布林型別。由於編譯時的限制,定義它們的表示式必須為能被編譯器求值的常量表示式。例如,1<<3是一個常量表示式,而math.Sin(math.Pi/4)不是,因為函式呼叫math.Sin需要在執行時才發生。
二、init
每個原始檔可以定義自己的不帶引數的(niladic)init函式,來設定它所需的狀態。(實際上每個檔案可以有多個init函式。)init是在程式包中所有變數宣告都被初始化,以及所有被匯入的程式包中的變數初始化之後才被呼叫。
除了用於無法通過宣告來表示的初始化以外,init函式的一個常用法是在真正執行之前進行驗證或者修復程式狀態的正確性。
三、陣列
在Go和C中,陣列的工作方式有幾個重要的差別。在Go中:
- 陣列是值。將一個陣列賦值給另一個,會拷貝所有的元素。
- 特別是,如果你給函式傳遞一個陣列,其將收到一個陣列的拷貝,而不是它的指標。
- 陣列的大小是其型別的一部分。型別[10]int和[20]int是不同的。
四、斷言
str := value.(string)
不過,如果該值不包含一個字串,則程式會產生一個執行時錯誤。為了避免這樣,可以使用“comma, ok”的習慣用法來安全地測試值是否為一個字串:
str, ok := value.(string)
if ok {
fmt.Printf("string value is: %q\n", str)
} else {
fmt.Printf("value is not a string\n")
}
如果型別斷言失敗,則str將依然存在,並且型別為字串,不過其為零值,一個空字串。
五、Recover
對於一些隱式的執行時錯誤,如切片索引越界、型別斷言錯誤等情形下,panic方法就會被呼叫,它將立刻中斷當前函式的執行,並展開當前Goroutine的呼叫棧,依次執行之前註冊的defer函式。當棧展開操作達到該Goroutine棧頂端時,程式將終止。但這時仍然可以使用Go的內建recover方法重新獲得Goroutine的控制權,並將程式恢復到正常執行的狀態。
呼叫recover方法會終止棧展開操作並返回之前傳遞給panic方法的那個引數。由於在棧展開過程中,只有defer型函式會被執行,因此recover的呼叫必須置於defer函式內才有效。
本文整理自:https://www.kancloud.cn/kancloud/effective/72199
個人微信公眾號:
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- 陣列型別轉換陣列型別
- Go語言學習(6) - 資料型別轉換和常量以及iotaGo資料型別
- GO型別斷言Go型別
- go語言資料型別轉換Go資料型別
- golang 快速入門 [8.4]-常量與隱式型別轉換Golang型別
- go interface{}型別轉換Go型別
- byte位元組陣列 轉換成double型別陣列型別
- go-常用型別轉換Go型別
- java型別轉換與強制型別轉換(轉)Java型別
- js資料型別判斷和陣列判斷JS資料型別陣列
- go 語言陣列Go陣列
- JS型別判斷、物件克隆、陣列克隆JS型別物件陣列
- 兄弟連go教程(2)型別-常量Go型別
- Go 常見資料型別-01陣列Go資料型別陣列
- Go interface 原理剖析--型別轉換Go型別
- 型別斷言型別
- 字串json陣列怎麼轉換成jsonobject型別字串JSON陣列Object型別
- 陣列與字串方法與相互轉換陣列字串
- go 語言常量Go
- Java 集合與陣列互相轉換Java陣列
- Go小工具系列——型別轉換Go型別
- C# 一維陣列如何快速實現陣列元素的資料型別的轉換?C#陣列資料型別
- TypeScript 型別斷言TypeScript型別
- java之資料型別與陣列Java資料型別陣列
- go陣列與切片Go陣列
- TypeScript 陣列型別TypeScript陣列型別
- js陣列型別JS陣列型別
- 日期型別與String型別的轉換型別
- GO語言————4.3常量Go
- string與char陣列相互轉換陣列
- xml與陣列的相互轉換——phpXML陣列PHP
- PHP陣列轉換為js陣列PHP陣列JS
- 逍遙自在學C語言 | 變數、常量與資料型別C語言變數資料型別
- dataguard型別轉換與模式轉化型別模式
- JNI/NDK開發指南(5):訪問陣列(基本型別陣列與物件陣列)陣列型別物件
- Go 語言學習筆記之陣列與切片Go筆記陣列
- PHP 型別轉換&&型別強制轉換PHP型別
- C語言-變數常量資料型別C語言變數資料型別