首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Golang 语言 for 和 for-range 的区别

除此之外,Golang 语言还引入了另外一个关键字 range,我们也可以配合 for 关键字,使用 for-range循环遍历数据。...本文我们介绍一下使用 for 和 for-range 循环遍历数据的区别。...02 区别 在 Golang 语言程序开发中,经常会使用循环遍历数据,因为 Golang 语言提供了 for-range 范围遍历,可以更加方便的帮助我们循环遍历数据,比如数据和数组指针、切片、字符串、...映射和通道,所以我们比较喜欢使用 for-range 范围遍历替代 for 普通遍历。...实际上,使用范围遍历 for-range 和使用普通遍历 for 是有区别的,因为范围遍历会在遍历之前,先拷贝一份被遍历的数据,然后遍历拷贝的数据。

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

为什么 Go for-range 的 value 值地址每次都一样?

原文链接: 为什么 Go for-range 的 value 值地址每次都一样?...循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型...但是在使用 for-range 循环迭代数组和切片的时候,是很容易出错的,甚至很多老司机一不小心都会在这里翻车。具体是怎么翻的呢?我们接着看。...对于数组、切片或字符串,每次迭代,for-range 语句都会将原始值的副本传递给迭代变量,而非原始值本身。口说无凭,具体是不是这样,还得靠源码说话。...Go 编译器会将 for-range 语句转换成类似 C 语言的三段式循环结构,就像这样:// Arrange to do a loop appropriate for the type.

32040

一文熟悉 Go 的循环结构 —— for 循环

for-range除了上面所讲的普通 for 循环的形式,Go 里面还支持一种 for 循环,为 for-range 循环,这是一种什么循环形式呢?...; i++ {fmt.Printf("下标:%d,元素:%d\n", i, nums[i]) }}上述代码,在循环前置语句中,声明数组的下标,然后循环体通过下标值打印数组的元素,我们来看看使用 for-range...的形式代码量少了很多,除了循环体保留了下来,其余部分都融入到了 for-range 的语义里。...小结本文首先介绍了 Go 里面的普通 for 循环,然后由普通 for 循环引出了 for-range 循环,对于数组、切片、Map 等复合数据结构,遍历方式使用 for-range 的形式会更好,特殊的复合数据类型如...Map,遍历方式也只能用 for-range 的形式。

11200

Golang并发:并发协程的优雅退出

1:使用for-range退出 for-range是使用频率很高的结构,常用它来遍历数据,range能够感知channel的关闭,当channel被发送数据的协程关闭时,range就会结束,接着退出for...1go func(in <-chan int) { 2 // Using for-range to exit goroutine 3 // range has the ability to...示例代码中,该协程需要从in通道读数据,还需要定时打印已经处理的数量,有2件事要做,所有不能使用for-range,需要使用for-select,当in关闭时,ok=false,我们直接返回。...协程处理1个通道,并且是读时,协程优先使用for-range,因为range可以关闭通道的关闭自动退出协程。 ,ok可以处理多个读通道关闭,需要关闭当前使用for-select的协程。

5K30

Go 语言入门系列:列表与字典及其遍历

遍历对于很多 Golang 的内置容器来说,形式都是基本一致的,主要通过 for-range 语法,我们将通过以下的例子分别展示数组、切片和字典的遍历过程,代码如下所示: package main import...小红", 2 : "小张", } for k, v:= range tmpMap{ // k 为键值,v 为对应值 fmt.Println(k, v, " ") } } 通过 for-range...在 for-range 遍历的过程中,因为键和值都是通过拷贝的方式进行赋值,对它们进行修改并不会影响到容器内成员的变化,这点需要我们在实际开发中多加注意。...go 语言中主要通过 for-range 语法,文中实际的案例分别展示了数组、切片和字典的遍历过程。Go 语言中提供了 list 列表和 Map 映射关系容器,这两种容器都是我们日常经常使用到的。

2.7K30

Go常见错误集锦之range常踩的那些坑

在Go语言中,for-range是常用的循环控制语句。本文就带你一起来踩踩使用range时的那些坑。...由于for-range的语法简单,同时我们不用手动处理循环中的条件表达式和迭代计数器变量,所以该方式比起传统的for循环是不容易出错的。...1.2 值拷贝 for-range比起传统的for循环虽然简单,但要想要正确使用range循环,理解每个迭代值是如何被处理的是至关重要的。...通过经典的for循环或for-range循环都可以做到: for i := range accounts { ① accounts[i].balance += 1000 } for i := 0;...一般来说常用的是for-range形式,但也没有规定,只要达到目的就好。 方案二:指针切片 第二种方式就是通过指针类型的切片来更新切片中的元素。

61310
领券