Go語言中是否存在foreach
構造?我可以使用for
迭代片或數組嗎?Go有沒有foreach循環?
回答
http://golang.org/doc/go_spec.html#For_statements
A「爲」通過的所有條目的陣列,切片,字符串或地圖,或值的 一個信道上接收的語句與「範圍」的條款進行迭代。 對於每個條目,它將迭代值分配給對應的迭代變量 ,然後執行該塊。
舉個例子:
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
}
下劃線,_
,是blank identifier,匿名佔位符。
可能有用的是說_被稱爲空白標識符,它只是忽略返回值 –
以下示例說明如何在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;
}
該示例遍歷一個函數數組,以統一函數的錯誤處理。 Google的一個完整示例是playground。 PS:它也表明吊括號對於代碼的可讀性來說是一個壞主意。提示:for
條件在action()
呼叫之前結束。很明顯,不是嗎?
遍歷陣列或切片:
// 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 range
對你的類型
for {
v := <-theChan
}
雖然OP只要求切片用法,但我更喜歡這個答案,因爲大多數人最終還需要其他用法。 – domoarrigato
關於'chan'用法的重要區別:如果作者在某個點關閉了頻道,則通道上的範圍將優雅地退出循環。在'for {v:= <-theChan}'_equivalent_中,它不會在通道關閉時退出。你可以通過第二個'ok'返回值來測試。 [TOUR示例](https://tour.golang.org/concurrency/4) – colminator
在閱讀時認爲是相同的,對於{...}表示無限循環。 – Levit
你其實可以使用range
沒有引用它的返回值:
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++
}
很高興知道,但這在大多數情況下不會有用 – Sridhar
同意@Sridhar它很適合。 – robstarbuck
以下是如何示例代碼在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)
}
}
- 1. 沒有輸入foreach循環
- 2. 有沒有辦法擺脫foreach循環?
- 3. foreach循環沒有找到var
- 4. Foreach循環沒有正確地通過
- 5. Foreach循環沒有全部數據
- 6. 打破foreach循環沒有完成
- 7. 數據沒有輸入到foreach循環
- 8. 沒有for/foreach循環的LINQ查詢
- 9. 沒有得到通過foreach循環
- 10. PHP沒有進入foreach循環
- 11. php和mysql沒有顯示數據,沒有進入foreach循環
- 12. Foreach循環只有一次
- 13. PHP循環通過XML嵌套循環沒有多個foreach循環?
- 14. 在foreach循環中的PHP foreach沒有顯示正確的值
- 15. FOREACH foreach循環內循環
- 16. 沒有循環
- 17. 有沒有辦法在foreach循環中打破速度?
- 18. 有沒有辦法修改foreach循環變量?
- 19. Go有沒有autovivification?
- 20. 沒有for循環
- 21. 的foreach循環foreach循環中(Java)的
- 22. 在foreach循環內的foreach循環
- 23. 具有foreach循環問題的HTML行
- 24. Foreach循環有2個變量
- 25. Laravel Eloquent ORM where有一個foreach循環
- 26. Foreach循環似乎有語法錯誤?
- 27. R - 帶有verbose = TRUE的foreach循環
- 28. 具有用於foreach循環的UL
- 29. 有兩個數組的Java foreach循環
- 30. 自動Foreach所有的嵌套循環
請查閱:http://groups.google。com/group/golang-nuts/browse_thread/thread/e2966ccdfe910e14?pli = 1 – Kakashi
在for循環中'range'的使用也在Go教程的「An Interlude about Types」一節中提到。 – kostix