對于golang, 交換兩個數(shù)很簡單,如下這么寫就可以了:
創(chuàng)新互聯(lián)建站為您提適合企業(yè)的網(wǎng)站設計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強的網(wǎng)絡競爭力!結(jié)合企業(yè)自身,進行網(wǎng)站設計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站設計、成都網(wǎng)站建設, 我們的網(wǎng)頁設計師為您提供的解決方案。
i, j = j, i
等號左邊和右邊含有多個表達式,這就是平行賦值。 賦值分為兩個步驟:
我們來看下面一段代碼會輸出什么?
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]。 這是因為等號左邊的切片的索引表達式i-1會被先計算,最后才是賦值。 計算和賦值的順序,都是從左往右。 我們再來看下面的代碼會輸出什么?
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]:
在賦值的過程中,即使后面的引發(fā)了panic,前面的也會被賦值成功。 再看這個會輸出什么?
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()
再次理解一下,賦值的第一步,計算等號左邊的索引表達式,取址表達式 和 計算等號右邊的表達式。
理解參照了《Go并發(fā)編程一書》
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。