Golang Go语言中 the-way-to-go 7.5 小节里的问题

发布于 1周前 作者 yibo5220 来自 Go语言

问题 7.5 假设我们有如下数组:items := [...]int{10, 20, 30, 40, 50}

a) 如果我们写了如下的 for 循环,那么执行完 for 循环后的 items 的值是多少?如果你不确定的话可以测试一下:)

for _, item := range items {
    item *= 2
}

b) 如果 a) 无法正常工作,写一个 for 循环让值可以 double 。

如何实现:一个 for 循环让值可以 double ?


Golang Go语言中 the-way-to-go 7.5 小节里的问题

更多关于Golang Go语言中 the-way-to-go 7.5 小节里的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复

for i := range items {
items[i] *= 2
}

更多关于Golang Go语言中 the-way-to-go 7.5 小节里的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


左边的 item 是新建的变量

这个应该是很常见的问题吧,foreach 是只读的

楼上这个可以

items : [10 20 30 40 50]
运行后变成
items : [20 40 60 80 100]

尝试打印每个循环中的变量地址

代码:
items := […]int{10, 20, 30, 40, 50}
for k, item := range items {
fmt.Println("k: ", k, “&items[k] :”, &items[k], "&item: ", &item)
}

结果:
k: 0 &items[k] : 0xc000015650 &item: 0xc00014ecb8
k: 1 &items[k] : 0xc000015658 &item: 0xc00014ecb8
k: 2 &items[k] : 0xc000015660 &item: 0xc00014ecb8
k: 3 &items[k] : 0xc000015668 &item: 0xc00014ecb8
k: 4 &items[k] : 0xc000015670 &item: 0xc00014ecb8

可以看到每个循环的过程中,item 这个变量的地址是相同的,并没有依次指向数组的每个元素.
所以对他进行的操作,都是修改的这个循环内存的变量,不会对原数组造成影响.
要操作数组每个元素,用索引的方式 items[k]



更多信息:
https://go.dev/ref/spec#For_statements

for 出来的值是复制了一下

用一楼方法就可以了

作为IT领域GO语言方面的专家,对于Golang中“the-way-to-go 7.5”小节的问题,可以提供以下专业解答:

在Golang的“the-way-to-go 7.5”小节中,通常会探讨一些较为深入的编程概念或实践问题。虽然具体的7.5小节内容可能因不同版本或资料而异,但基于Golang的普遍特性和编程实践,可以推测该小节可能涉及的内容包括:

  1. 控制结构的高级应用:如if-else、switch-case和for循环的复杂用法,特别是嵌套结构、多重条件判断以及循环控制语句(break、continue)的使用。
  2. 函数与错误处理:可能包括多返回值函数的应用、错误处理机制(如panic和recover)、以及defer语句在资源清理和异常处理中的作用。
  3. 指针与内存管理:探讨指针操作、内存分配与释放,以及垃圾回收机制对程序性能的影响。
  4. 并发编程:可能涉及goroutine、channel以及sync包的使用,用于实现高效的并发编程。

建议查阅具体的“the-way-to-go”教程或书籍,以获取7.5小节的精确内容。同时,参考官方文档和社区资源也是提升Golang编程技能的有效途径。

回到顶部