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循环吗?相关推荐

  1. 如何确定foreach循环中的第一次和最后一次迭代?

    问题很简单. 我的代码中有一个foreach循环: foreach($array as $element) {//code } 在这个循环中,我想在第一次或最后一次迭代时做出不同的反应. 这该怎么做? ...

  2. java for循环迭代_JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable接口(位于java.lang包中),实现这个接口允许对象成为 "fo ...

  3. foreach循环遍历的原理解析

    先编写一个foreach循环遍历的测试方法 运行 public class MyTest {public static void main(String[] args) {List<String ...

  4. Java中foreach循环两种实现原理

    一.foreach循环Iterator模式 首先我们看一个foreach循环的main方法 import java.util.Collections; import java.util.List; i ...

  5. 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解

    数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留.建议使用 unset() 来将其销毁. Note: foreach 不支持用"@"来抑制错误信息的能力. ...

  6. java foreach6_Java foreach循环是否会创建一个新对象?

    for-each循环没有神奇的对象构造.这个语法: for(Object o : Objects) { for(Object p : Objects2) { } } 这只是简写: for(Iterat ...

  7. 循环获取另一个php变量,通过引用将多个变量传递给foreach循环(php)

    场景/问题隔离 :假设我的程序使用多个变量.在程序开始时,我希望通过一个代码很少的通用函数同时操作许多变量,然后在流程的后面,在特定函数中只使用一些独特的变量. 问题 :如何通过引用foreach循环 ...

  8. list的add方法 ,foreach循环添加map---List.add(map)(通过一个java爬虫案例说明)

    案例:一个java爬虫程序 1.案例说明 做了一个爬取某程的旅游网站的java程序,程序主要爬取安庆酒店的某些相关信息. 材料准备:jsoup-1.8.1.jar(需要此架包的联系博主,有任何问题欢迎 ...

  9. php for循环逗号,关于php:从foreach循环中删除最后一个逗号

    我使用foreach循环从数据库中回显一些值,如果这有意义的话,我需要从最后一个循环中去掉最后一个逗号. 我的循环很简单,如下所示 foreach($results as $result){ echo ...

最新文章

  1. C#程序调用cmd执行命令
  2. 缓存HA的开源解决方案
  3. 算法导论-动态规划(dynamic programming)
  4. NYOJ 891 找点
  5. 11尺寸长宽 iphone_新手必知LED显示屏尺寸规格及计算方法
  6. 站长如何屏蔽流氓宽带商在你的页面里面强行插入的广告代码
  7. linux ddd yum,Linux环境ddd安装与使用
  8. 使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句
  9. Atitit 自然语言处理(NLP)的应用 与 搜索引擎 目录 1.1. 搜索引擎并不是自然语言处理(NLP)的唯一应用。 2 1.2. NLP的应用 2 1.3. 社交网站信息流, 2 1.4.
  10. 信息系统项目管理师——成本管理
  11. 服务器软件系统日常运维工作制度
  12. 呼叫中心人工坐席系统
  13. 了解 Web 服务规范,第 5 部分: WS-Policy
  14. 计算机桌面ie图标无法删除,Win7桌面IE图标无法删除如何解决?
  15. 分布式计算 网格计算 并行计算 云计算
  16. H5横幅,旗帜飘动动画
  17. cocos2d_x之AnySDK接入流程
  18. java面试逻辑思维题目_逻辑思维面试题-java后端面试
  19. Codeforces 416C Booking System
  20. fatal: http://gitlab.xxxx.com/xxx/songjy-coocaa.git/info/refs not valid: is this a git repository

热门文章

  1. Android面试题目之四: 归并排序
  2. 世界应该多点理解关爱,少点争吵
  3. Andrid 图片被挤压
  4. GIT中打标签(tag)的意义
  5. python伪造邮件发件地址_python写一个邮箱伪造脚本
  6. Android之打造可定制的全场秒杀倒计时控件
  7. Android之SimpleAdapter使用
  8. Service应用场景分析
  9. RoboGuice 解析
  10. (0028)iOS 开发之Xcode使用技巧