Go中有一个foreach循环吗?
Go语言中有一个foreach
构造吗? 我可以使用for
迭代切片或数组吗?
#1楼
以下示例显示如何在for
循环中使用range
运算符来实现foreach
循环。
func PrintXml (out io.Writer, value interface{}) error {var data []bytevar err errorfor _, 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的游乐场 。
PS:它还表明,吊括号对代码的可读性不是一个好主意。 提示: for
条件在action()
调用之前结束。 很明显,不是吗?
#2楼
Go具有foreach
的语法。 它支持数组/切片,地图和通道。
遍历数组或切片 :
// 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, ok := <-theChanif !ok {break}
}
#3楼
你可以在实际上的使用range
不通过引用它的返回值for 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++
}
https://play.golang.org/p/XHrHLbJMEd
#4楼
以下是在golang中如何使用foreach的示例代码
package mainimport ("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
#5楼
这可能很明显,但是您可以像这样内联数组:
package mainimport ("fmt"
)func main() {for _, element := range [3]string{"a", "b", "c"} {fmt.Print(element)}
}
输出:
abc
https://play.golang.org/p/gkKgF3y5nmt
#6楼
是的, 范围 :
for循环的范围形式在切片或映射上迭代。
在切片上进行测距时,每次迭代都会返回两个值。 第一个是索引,第二个是该索引处的元素的副本。
范例:
package mainimport "fmt"var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}func main() {for i, v := range pow {fmt.Printf("2**%d = %d\n", i, v)}for i := range pow {pow[i] = 1 << uint(i) // == 2**i}for _, value := range pow {fmt.Printf("%d\n", value)}
}
- 您可以通过指定_来跳过索引或值。
- 如果只需要索引,请完全删除值。
#7楼
https://golang.org/ref/spec#For_range
带有“ range”子句的“ for”语句遍历数组,切片,字符串或映射的所有条目,或通道上接收到的值。 对于每个条目,它将迭代值分配给相应的迭代变量,然后执行该块。
举个例子:
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
}
下划线_
是空白标识符 ,一个匿名占位符。
Go中有一个foreach循环吗?相关推荐
- 如何确定foreach循环中的第一次和最后一次迭代?
问题很简单. 我的代码中有一个foreach循环: foreach($array as $element) {//code } 在这个循环中,我想在第一次或最后一次迭代时做出不同的反应. 这该怎么做? ...
- java for循环迭代_JAVA中的for-each循环与迭代
在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable接口(位于java.lang包中),实现这个接口允许对象成为 "fo ...
- foreach循环遍历的原理解析
先编写一个foreach循环遍历的测试方法 运行 public class MyTest {public static void main(String[] args) {List<String ...
- Java中foreach循环两种实现原理
一.foreach循环Iterator模式 首先我们看一个foreach循环的main方法 import java.util.Collections; import java.util.List; i ...
- 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解
数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留.建议使用 unset() 来将其销毁. Note: foreach 不支持用"@"来抑制错误信息的能力. ...
- java foreach6_Java foreach循环是否会创建一个新对象?
for-each循环没有神奇的对象构造.这个语法: for(Object o : Objects) { for(Object p : Objects2) { } } 这只是简写: for(Iterat ...
- 循环获取另一个php变量,通过引用将多个变量传递给foreach循环(php)
场景/问题隔离 :假设我的程序使用多个变量.在程序开始时,我希望通过一个代码很少的通用函数同时操作许多变量,然后在流程的后面,在特定函数中只使用一些独特的变量. 问题 :如何通过引用foreach循环 ...
- list的add方法 ,foreach循环添加map---List.add(map)(通过一个java爬虫案例说明)
案例:一个java爬虫程序 1.案例说明 做了一个爬取某程的旅游网站的java程序,程序主要爬取安庆酒店的某些相关信息. 材料准备:jsoup-1.8.1.jar(需要此架包的联系博主,有任何问题欢迎 ...
- php for循环逗号,关于php:从foreach循环中删除最后一个逗号
我使用foreach循环从数据库中回显一些值,如果这有意义的话,我需要从最后一个循环中去掉最后一个逗号. 我的循环很简单,如下所示 foreach($results as $result){ echo ...
最新文章
- C#程序调用cmd执行命令
- 缓存HA的开源解决方案
- 算法导论-动态规划(dynamic programming)
- NYOJ 891 找点
- 11尺寸长宽 iphone_新手必知LED显示屏尺寸规格及计算方法
- 站长如何屏蔽流氓宽带商在你的页面里面强行插入的广告代码
- linux ddd yum,Linux环境ddd安装与使用
- 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
- Atitit 自然语言处理(NLP)的应用 与 搜索引擎 目录 1.1. 搜索引擎并不是自然语言处理(NLP)的唯一应用。	2 1.2. NLP的应用	2 1.3. 社交网站信息流,	2 1.4.
- 信息系统项目管理师——成本管理
- 服务器软件系统日常运维工作制度
- 呼叫中心人工坐席系统
- 了解 Web 服务规范,第 5 部分: WS-Policy
- 计算机桌面ie图标无法删除,Win7桌面IE图标无法删除如何解决?
- 分布式计算 网格计算 并行计算 云计算
- H5横幅,旗帜飘动动画
- cocos2d_x之AnySDK接入流程
- java面试逻辑思维题目_逻辑思维面试题-java后端面试
- Codeforces 416C Booking System
- fatal: http://gitlab.xxxx.com/xxx/songjy-coocaa.git/info/refs not valid: is this a git repository