Go有没有foreach循环?
Go语言中有一个foreach
构造吗? 我可以使用for
迭代一个片或数组吗?
http://golang.org/doc/go_spec.html#For_statements
具有“范围”子句的“for”语句遍历数组,切片,string或映射的所有条目或通道上接收的值。 对于每个条目,它将迭代值分配给对应的迭代variables,然后执行该块。
举个例子:
for index, element := range someSlice { // index is the index where we are // element is the element from someSlice for where we are }
如果你不关心索引,你可以使用_
:
for _, element := range someSlice { // element is the element from someSlice for where we are }
下划线_
是空白标识符 ,是一个匿名占位符。
遍历数组或片段 :
// index and value for i, v := range slice {} // index only for i := range slice {} // value only for _, v := range slice {}
遍历地图 :
// key and value for key, value := range theMap {} // key only for key := range theMap {} // value only for _, value := range theMap {}
迭代频道 :
for v := range theChan {}
相当于:
for { v := <-theChan }
以下示例显示如何在for
循环中使用range
运算符来实现foreach
循环。
func PrintXml (out io.Writer, value interface{}) error { var data []byte var err error for _, action := range []func() { func () { data, err = xml.MarshalIndent(value, "", " ") }, func () { _, err = out.Write([]byte(xml.Header)) }, func () { _, err = out.Write(data) }, func () { _, err = out.Write([]byte("\n")) }} { action(); if err != nil { return err } } return nil; }
该示例遍历一组函数来统一函数的error handling。 一个完整的例子是在Google的游乐场 。
PS:它也显示了吊括号对于代码的可读性来说是一个坏主意。 提示: for
条件在action()
调用之前结束。 明显的,不是吗?
实际上,您可以使用range
而不必通过使用for range
反映您的types来引用它的返回值:
arr := make([]uint8, 5) i,j := 0,0 for range arr { fmt.Println("Array Loop",i) i++ } for range "bytes" { fmt.Println("String Loop",j) j++ }
以下是如何在golang中使用foreach的示例代码
package main import ( "fmt" ) func main() { arrayOne := [3]string{"Apple", "Mango", "Banana"} for index,element := range arrayOne{ fmt.Println(index) fmt.Println(element) } }
这是一个正在运行的示例https://play.golang.org/p/LXptmH4X_0