有没有办法在Go中反向切片?

能够说出如下内容会很方便:

for _, element in reverse range mySlice { ... } 

没有没有方便的运营商为此增加了一个到位的范围。 你必须做一个正常的循环倒计时:

 s := []int{5, 4, 3, 2, 1} for i := len(s)-1; i >= 0; i-- { fmt.Println(s[i]) } 

你也可以这样做:

 s := []int{5, 4, 3, 2, 1} for i := range s { fmt.Println(s[len(s)-1-i]) // Suggestion: do `last := len(s)-1` before the loop } 

输出:

 1 2 3 4 5 

也在这里: http : //play.golang.org/p/l7Z69TV7Vl

人们可以使用一个通道来反转一个函数中的列表而不用重复它。 它使我的意义上的代码更好。

 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) } } 

如何使用延迟:

 s := []int{5, 4, 3, 2, 1} for i, _ := range s { defer fmt.Println(s[i]) } 

与索引的变化

 for k := range s { k = len(s) - 1 - k // now k starts from the end }