mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
Updated LoopvarExperiment (markdown)
parent
75f0dd04aa
commit
51a037acb5
@ -116,7 +116,7 @@ For full details, see [the design document](https://go.googlesource.com/proposal
|
|||||||
## Can this change break programs?
|
## Can this change break programs?
|
||||||
|
|
||||||
Yes, it is possible to write programs that this change would break. For example, here is a surprising way to add the values in a list using a single-element map:
|
Yes, it is possible to write programs that this change would break. For example, here is a surprising way to add the values in a list using a single-element map:
|
||||||
|
```
|
||||||
func sum(list []int) int {
|
func sum(list []int) int {
|
||||||
m := make(map[*int]int)
|
m := make(map[*int]int)
|
||||||
for _, x := range list {
|
for _, x := range list {
|
||||||
@ -127,7 +127,7 @@ func sum(list []int) int {
|
|||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
```
|
||||||
It depends on the fact that there is only one `x` in the loop, so that `&x` is the same in each iteration. With `GOEXPERIMENT=loopvar`, `x` escapes the iteration, so `&x` is different on each iteration, and the map now has multiple entries instead of a single entry.
|
It depends on the fact that there is only one `x` in the loop, so that `&x` is the same in each iteration. With `GOEXPERIMENT=loopvar`, `x` escapes the iteration, so `&x` is different on each iteration, and the map now has multiple entries instead of a single entry.
|
||||||
|
|
||||||
And here is a surprising way to print the values 0 through 9:
|
And here is a surprising way to print the values 0 through 9:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user