Go語言range關鍵字循環(huán)時的坑
關鍵字range可用于循環(huán),類似迭代器操作,它可以遍歷slice,array,string,map和channel,然后返回索引或值??梢允褂谩盻”來忽略不想要的返回值。可以方便的讀取上面類型中的內容,例如:
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”變?yōu)椤?”,使用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],但執(zhí)行后卻是[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)
}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
相關文章
Golang中的new()和make()函數本質區(qū)別
在 Go 語言開發(fā)中,new() 和 make() 是兩個容易讓開發(fā)者感到困惑的內建函數,盡管它們都用于內存分配,但其設計目的、適用場景和底層實現存在本質差異,本文將通過類型系統(tǒng)、內存模型和編譯器實現三個維度,深入解析這兩個函數的本質區(qū)別,感興趣的朋友一起看看吧2025-02-02
Go如何優(yōu)雅的關閉goroutine協(xié)程
本文將介紹首先為什么需要主動關閉goroutine,并介紹如何在Go語言中關閉goroutine的常見套路,包括傳遞終止信號和協(xié)程內部捕捉終止信號,之后,文章列舉了需要主動關閉協(xié)程運行的常見場景,希望通過本文的介紹,讀者能夠掌握如何在適當的時候關閉goroutine2023-05-05
go語法入門泛型type?parameters簡稱T(類型形參)兩種場景使用
這篇文章主要為大家介紹了go語法入門泛型type?parameters簡稱T(類型形參)兩種場景使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09

