Go语言range关键字循环时的坑
2019/7/10 22:04:09
本文主要是介绍Go语言range关键字循环时的坑,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
关键字range
可用于循环,类似迭代器操作,它可以遍历slice
,array
,string
,map
和channel
,然后返回索引或值。可以使用”_”来忽略不想要的返回值。可以方便的读取上面类型中的内容,例如:
1 2 3 4 5 6 7 8 | 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来进行遍历修改。
1 2 3 4 5 6 7 8 9 10 11 | 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语句
1 2 3 4 5 6 7 8 9 10 11 | 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) } |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对找一找教程网的支持。如果你想了解更多相关内容请查看下面相关链接
这篇关于Go语言range关键字循环时的坑的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03如何用Google Gemini和MyScaleDB打造一个基于检索增强生成技术的聊天机器人
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享