Go語言range關鍵字循環時的坑

今天小編就爲大家分享一篇關於Go語言range關鍵字循環時的坑,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

關鍵字range可用於循環,類似迭代器操作,它可以遍歷slice,array,string,mapchannel,然後返回索引或值。可以使用”_”來忽略不想要的返回值。可以方便的讀取上面類型中的內容,例如:

package main
import "fmt"
func main() {
  str1 := []string{"1", "2", "3", "4"}
  for key, value := range str1 {
    fmt.Println(key, ":", value)
  }
}

但是如果想要改變這些類型的值,用range就可能達不到你期望的效果。例如,將上面str1中的值”2”和”4”變爲”6”,使用range來進行遍歷修改。

package main
import "fmt"
func main() {
  str1 := []string{"1", "2", "3", "4"}
  for _, value := range str1 {
    if value == "2" || value == "4" {
      value = "6"
    }
  }
  fmt.Println(str1)
}

你可能覺得結果會是[1 6 3 6],但執行後卻是[1 2 3 4]。也就是說在range中對切片進行操作,並沒有影響到切片(原切片)。

出現上述問題的原因是因爲for range遍歷的內容是對原內容的一個拷貝,所以不能用來修改原切片中內容。

修改方法:

使用for語句

package main
import "fmt"
func main() {
  str1 := []string{"1", "2", "3", "4"}
  for i := 0; i < len(str1); i++ {
    if str1[i] == "2" || str1[i] == "4" {
      str1[i] = "6"
    }
  }
  fmt.Println(str1)
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章