Golang——for迴圈的兩種用法

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

從大一開始學C++,所接觸過的for迴圈只有一種方式,for (int i = 0; i < count; i++) {...}。後來接觸了Java,知道Java 5 引入了一種新特性,可以通過for (a : aa)遍曆整個數組。雖然知道,但是也沒用過,因為之前那種方法足夠了。

現在主力語言是Go。Go也支援傳統的寫法for i := 0; i < count; i++ {...}。同樣,還有一種for i, a := range aa {...}。這個跟Java相比,除了能夠遍曆,還能得到當前遍曆的索引值,所以在Go中,更傾向於後面這種方法,令活動更高。

今天要對一個資料進行遍曆,對每個元素進行稍加修改,才發現,原來這兩種方式是有很大區別的。當時使用第二種方式修改之後,一直發現沒有修改成功。後來進過調試,才發現是for迴圈的問題。

測試代碼在這裡

a := []string{}a = append(a, "hello")a = append(a, ", ")a = append(a, "world")fmt.Println(a)for i := 0; i < len(a); i++ {fmt.Println(&a[i])}for _, aa := range a {aa += "@"fmt.Println(&aa)}for i := 0; i < len(a); i++ {a[i] += "@"fmt.Println(&a[i])}fmt.Println(a)

通過range方式獲得的變數,列印出它的地址,和之前的數組a的地址相比,是不同的地址。

[hello ,  world]0x103222800x103222880x103222900x1030e1000x1030e1000x1030e1000x103222800x103222880x10322290[hello@ , @ world@]

這裡就可以證明,通過range方式獲得的變數,和a[i]變數是不同的,只是裡面存的值一樣而已。所以,如果做出了修改操作,也不會修改到原來的數組。

果斷再去看一下大Java的文法。結果也是一樣的。

class TestFor {public static void main(String[] args) {String[] a = {"hello", ", ", "world"};System.out.println(a[0] + a[1] + a[2]);for (String aa : a) {aa += "@";}System.out.println(a[0] + a[1] + a[2]);}}

如果遍曆數組,還需要對數組元素進行操作,建議用傳統for迴圈因為可以定義角標通過角標操作元素。如果只為遍曆擷取,可以簡化成進階for迴圈,它的出現為了簡化書寫。

傳統的for,寫起來不太方便,但是功能強大;如果只是單純得遍曆,可以使用新的寫法,簡化代碼。

######參考文獻+ 【1】JAVA5.0新特性 - 子默

原文連結:Golang——for迴圈的兩種用法,轉載請註明來源!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.