Можно использовать канал для изменения списка в функции без дублирования. Это делает код более приятным в моем смысле.
package main
import (
"fmt"
)
func reverse(lst []string) chan string {
ret := make(chan string)
go func() {
for i, _ := range lst {
ret <- lst[len(lst)-1-i]
}
close(ret)
}()
return ret
}
func main() {
elms := []string{"a", "b", "c", "d"}
for e := range reverse(elms) {
fmt.Println(e)
}
}
Ответ 4
Как насчет использования отложить:
s := []int{5, 4, 3, 2, 1}
for i, _ := range s {
defer fmt.Println(s[i])
}
Ответ 5
Изменение с индексом
for k := range s {
k = len(s) - 1 - k
// now k starts from the end
}