golang 平行賦值探討

來源:互聯網
上載者:User
對於golang, 交換兩個數很簡單,如下這麼寫就可以了:```i, j = j, i```等號左邊和右邊含有多個運算式,這就是平行賦值。賦值分為兩個步驟: 1. 計算等號左邊的運算元的索引運算式和取址運算式,計算等號右邊的運算式。 2. 賦值 我們來看下面一段代碼會輸出什嗎? ```func main() {i := 1s := []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 rangegoroutine 1 [running]:```在賦值的過程中,即使後面的引發了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 rangegoroutine 1 [running]:main.main()```再次理解一下,賦值的第一步,計算等號左邊的索引運算式,取址運算式 和 計算等號右邊的運算式。理解參照了《Go並發編程一書》91 次點擊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.