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型別
- 字串json陣列怎麼轉換成jsonobject型別字串JSON陣列Object型別
- go-常用型別轉換Go型別
- Go interface 原理剖析--型別轉換Go型別
- 陣列與字串方法與相互轉換陣列字串
- go 語言陣列Go陣列
- JS型別判斷、物件克隆、陣列克隆JS型別物件陣列
- string與char陣列相互轉換陣列
- Java 集合與陣列互相轉換Java陣列
- Go 常見資料型別-01陣列Go資料型別陣列
- 型別斷言型別
- 兄弟連go教程(2)型別-常量Go型別
- C# 一維陣列如何快速實現陣列元素的資料型別的轉換?C#陣列資料型別
- Go小工具系列——型別轉換Go型別
- xml與陣列的相互轉換——phpXML陣列PHP
- PHP陣列轉換為js陣列PHP陣列JS
- go 語言常量Go
- TypeScript 型別斷言TypeScript型別
- C語言的隱式型別轉換C語言型別
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- 【python】str與json型別轉換PythonJSON型別
- 造型與強制型別轉換型別
- TypeScript 陣列型別TypeScript陣列型別
- go陣列與切片Go陣列
- 型別轉換型別
- GO語言————4.3常量Go
- 如何將一維陣列轉換成與考慮南天陣列元素?陣列
- 兄弟連go教程(4)型別-引用及轉換Go型別
- Go 語言學習筆記之陣列與切片Go筆記陣列
- 【Java】int[] 陣列 和 Integer陣列的轉換Java陣列
- C語言-變數常量資料型別C語言變數資料型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- python 與 Mysql 資料型別轉換PythonMySQL 資料型別
- 資料型別,型別轉換資料型別
- 記一次關於js陣列型別判斷及js型別判斷的細節探索JS陣列型別