πŸ’¬ КакиС измСнСния ΠΊΠΎΡΠ½ΡƒΠ»ΠΈΡΡŒ Ρ†ΠΈΠΊΠ»Π° for Π² Go 1.22?



1. ИзмСнСниС Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°: Π² Go 1.21 ΠΈ Ρ€Π°Π½Π΅Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ†ΠΈΠΊΠ»Π΅ for, создавались ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ обновлялись ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ привСсти ΠΊ ошибкам, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная использовалась Π² замыканиях. НапримСр:



var funcs []func()

for i := 0; i < 3; i++ {

funcs = append(funcs, func() { fmt.Println(i) })

}

for _, f := range funcs {

f() // Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "3" Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i.

}





Π’ Go 1.22, каТдая итСрация Ρ†ΠΈΠΊΠ»Π° создаСт Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:



var funcs []func()

for i := 0; i < 3; i++ {

funcs = append(funcs, func(i int) func() {

return func() { fmt.Println(i) }

}(i))

}

for _, f := range funcs {

f() // Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ "0", "1", "2", Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ каТдая функция ссылаСтся Π½Π° свою копию ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i.

}





2. Π¦ΠΈΠΊΠ»Ρ‹ for Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Ρ†Π΅Π»Ρ‹ΠΌ числам: Π² Go 1.22 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹ for для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ Ρ†Π΅Π»Ρ‹Ρ… чисСл. НапримСр:



package main



import "fmt"



func main() {

for i := range 10 {

fmt.Println(10 - i) // Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ числа ΠΎΡ‚ 10 Π΄ΠΎ 1.

}

}





Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ†ΠΈΠΊΠ» for ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ†Π΅Π»Ρ‹ΠΌ числам ΠΎΡ‚ 0 Π΄ΠΎ 9, ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ выводится число, Ρ€Π°Π²Π½ΠΎΠ΅ 10 минус Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.