編輯器換成了 GoLand,看原始碼極其方便,就是快捷鍵又要適應一會兒,
今天開始看 《Go 程式設計語言》,別名《Go 語言圣經》,
$ ./goBible --type=書籍 --name=Go 語言圣經(一)--chapter=Program Structure
1. 宣告變數,有四種方式
雖然 Go 一直說自己很簡潔,去掉很多多余的語法,但是又舍不得語法糖,于是宣告一個變數出現了 4 種用法,這里假設我們要宣告一個叫 s 的 string 型別的變數:
var s stringvar s = ""s := ""var s string = ""
語法就不講了,非常基礎的東西,這里講一下這四種方式分別用在哪種情況:- 第一種很明顯,當不需要初始化(或者說只需要零值)的時候使用,(還是提一下,Go 里沒有未初始化這種說法,全部都有初始化)
- 2 和 3 其實是完全可以互相代替的,但是一般來講,2 比較正式,用于宣告一些 package-level 的變數,而 3 就比較為了圖省事,一般用于函式內的一些 local 變數,
- 4 看起來顯得十分多余,但是如果你需要類似于
var a float64 = 100這種用法的時候,就有用處了,
2. 指標
指標沒什么好說的,需要說的是二級指標,但是因為某種原因我寫在另一篇文章里了:
我的另一篇文章,
3. 作用域
和 js 一模一樣,甚至也一樣可以使用無關鍵字的大括號,
甚至也是用的作用域鏈,
但不是完全沒得說,因為 go 里的 for,if 等有一個隱式作用域:
for i := 0; i < 10; i++ {
fmt.Println(i)
i := 0
fmt.Println(i)
}
// 你覺得會無限回圈嗎?其實不會
// 總共會回圈 10 次
// 第一個 print 會依次 print 0,1,2...9
// 第二個 print 會列印 10 個 0
為什么,因為 for 的初始化陳述句塊其實也是一個作用域,你說我知道啊,和 for 里的陳述句在同一個作用域嘛,所以可以訪問,
但是不是,這就是 go 的奇妙之處,其實整個代碼類似于這樣一個結構:
for {
(i := 0; i < 10; i++ )
{
fmt.Println(i)
i := 0
fmt.Println(i)
}
}
也就是說,大括號里的陳述句塊和初始化 i 的陳述句塊并不是在同一個作用域,而是嵌套的,所以可以使用 i,但是卻不能改變外面的 i,所以這個回圈必定是回圈 10 次,
這個語法是好是壞見仁見智了,我有時候還是會想在內部改變 i 從而跳過幾個回圈的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285540.html
標籤:Go
上一篇:自適應微服務治理背后的演算法
