關(guān)于golang中平行賦值淺析
對(duì)于golang, 交換兩個(gè)數(shù)很簡(jiǎn)單,如下這么寫(xiě)就可以了:
i, j = j, i
等號(hào)左邊和右邊含有多個(gè)表達(dá)式,這就是平行賦值。 賦值分為兩個(gè)步驟:
- 計(jì)算等號(hào)左邊的操作數(shù)的索引表達(dá)式和取址表達(dá)式,計(jì)算等號(hào)右邊的表達(dá)式。
- 賦值
我們來(lái)看下面一段代碼會(huì)輸出什么?
func main() { i := 1 s := []string{"A", "B", "C"} i, s[i-1] = 2, "Z" fmt.Printf("s: %v \n", s) }
這里輸出的 s: [Z,B,C] 而不是s: [A,Z,C]。 這是因?yàn)榈忍?hào)左邊的切片的索引表達(dá)式i-1會(huì)被先計(jì)算,最后才是賦值。 計(jì)算和賦值的順序,都是從左往右。 我們?cè)賮?lái)看下面的代碼會(huì)輸出什么?
func main() { a := []int{1, 2, 3, 4} defer func(a []int) { fmt.Printf("a: %v\n", a) }(a) a[0], a[4] = a[1], a[2] }
輸出的是:
a: [2 2 3 4] panic: runtime error: index out of range goroutine 1 [running]:
在賦值的過(guò)程中,即使后面的引發(fā)了panic,前面的也會(huì)被賦值成功。 再看這個(gè)會(huì)輸出什么?
func main() { a := []int{1, 2, 3, 4} defer func(a []int) { fmt.Printf("a: %v\n", a) }(a) a[0], a[1] = a[2], a[4] }
輸出的是:
a: [1 2 3 4] panic: runtime error: index out of range goroutine 1 [running]: main.main()
再次理解一下,賦值的第一步,計(jì)算等號(hào)左邊的索引表達(dá)式,取址表達(dá)式 和 計(jì)算等號(hào)右邊的表達(dá)式。
理解參照了《Go并發(fā)編程一書(shū)》
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Go存儲(chǔ)基礎(chǔ)使用direct io方法實(shí)例
這篇文章主要介紹了Go存儲(chǔ)基礎(chǔ)之如何使用direct io方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12使用go備份StarRocks建表語(yǔ)句方法實(shí)例
這篇文章主要為大家介紹了使用go備份StarRocks建表語(yǔ)句方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12golang Iris運(yùn)行多個(gè)應(yīng)用的實(shí)現(xiàn)
本文主要介紹了golang Iris運(yùn)行多個(gè)應(yīng)用的實(shí)現(xiàn),在Iris里面,提供了一種方式可以讓我們同時(shí)運(yùn)行多個(gè)應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)Web服務(wù)之創(chuàng)建路由
在上一節(jié)中創(chuàng)建了項(xiàng)目,這篇文章主要介紹如何用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)創(chuàng)建路由,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的同學(xué)可以參考下2023-05-05基于go-cqhttp與Flask搭建定制機(jī)器人項(xiàng)目實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了基于go-cqhttp與Flask搭建定制機(jī)器人項(xiàng)目實(shí)戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Go語(yǔ)言的變量、函數(shù)、Socks5代理服務(wù)器示例詳解
這篇文章主要介紹了Go語(yǔ)言的變量、函數(shù)、Socks5代理服務(wù)器的相關(guān)資料,需要的朋友可以參考下2017-09-09