go的for循环应该这么用

目录

目录

一:介绍

1: for流程控制

2:for-range流程控制

二:实例展示

1://按照一定次数循环

  2://无限循环

3:   //循环遍历整数、各种容器和通道

4:遍历通道

5://指针数组循环

6:使用continue

7:  协成处理

8: 循环字典按照顺序


一:介绍

go中的循环有for和for range两种循环结构,for循环结构

1: for流程控制

for InitSimpleStatement; Condition; PostSimpleStatement {
    // do something
}

在一个for循环代码块中,
InitSimpleStatement(初始化语句)和PostSimpleStatement(步尾语句)两个部分必须均为简单语句,并且PostSimpleStatement不能为一个变量短声明语句。
Condition必须为一个结果为布尔值的表达式(它被称为条件表达式)。
所有这三个刚提到的部分都是可选的。和很多其它流行语言不同,在Go中上述三部分不能用小括号括在一起。

2:for-range流程控制

for-range流程控制代码块可以用来遍历整数、各种容器和通道等。

注意:使用for-range流程控制代码块来遍历整数是从Go 1.22才开始支持的。

二:实例展示
1://按照一定次数循环


   for i := 1; i<=5; i++ {
        fmt.Println(i)
   }
  2://无限循环
   var j int
   for {
        j += 1
        fmt.Println(1)
        if j == 10 {
            break;
        }

   }
3:   //循环遍历整数、各种容器和通道

 
 arr := [2]string{"苹果","香蕉"}

   for index, value := range arr {
        fmt.Println(index)
        fmt.Println(value)

   }

4:遍历通道
c := make(chan int)
   go func() {

    for i:=0; i< 10; i++ {
        c <- i
    }
    close(c)
   }()


   for i := range c {
    fmt.Println(i)
   }

   fmt.Println("done")
5://指针数组循环
 type Goods struct {
    name string
    price float64
 }


allGoods := []*Goods{&Goods{name:"香蕉",price:3.2},&Goods{name:"苹果",price:2.2}}

定义一个结构体是Goods的指针数组,保存每一个实例化结构体的地址,循环读取地址,打印地址的内容

 for _, item := range allGoods {
        
        fmt.Println(*item)
   }

这里有个问题,如果我们在循环中保存结构体的地址到数组指针就会出现问题,看下面的程序

allGoods := []Goods{Goods{name:"香蕉",price:3.2},Goods{name:"苹果",price:2.2}}

我们定义一个结构体数组,循环这个数组,获取每个结构体的地址保存到一个指针数组中

var saleGoods []*Goods
 for _, item := range allGoods {
        saleGoods = append(saleGoods,&item)

   }
  fmt.Println(saleGoods)

正常我们打印出来是一个保存地址的数组,但是发现这个数组只保存最后一个数据的地址,数组的地址是重复的。

解决方法是循环中item的值每次重新赋值

item := item

saleGoods = append(saleGoods,&item)

默认go在循环中,不是变量的迭代,而是循环本身,这个问题在Go 1.22之后得到改善。

6:使用continue
 for i := 0; i < 10; i++ {
    if i % 2 == 0 {
        continue
    }
    fmt.Print(i)
7:  协成处理


var m = []int{1, 2, 3}
for _,i := range m {
    go func(i int) {
        fmt.Print(i)
    }(i)
}

time.Sleep(time.Millisecond) 

但是这样循环是没有顺序的,如果需要按照一定的顺序,该怎么处理呢

8: 循环字典按照顺序

 m := map[string]int32{
        "roy":   18,
        "kitty": 16,
        "hugo":  21,
        "tina":  35,
        "jason": 23,
    }
    lst := []string{}
    for k, _ := range m {
        lst = append(lst, k)
    }
    sort.Strings(lst) //排序字符串
    
    for _,i := range lst {
        fmt.Println(m[i])
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/488372.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git笔记之撤销、回退、reset方面的笔记

git笔记之撤销、回退、reset方面的笔记 code review! 文章目录 git笔记之撤销、回退、reset方面的笔记1.git 已经commit了&#xff0c;还没push&#xff0c;如何撤销到初始状态git reset --soft HEAD~1git reset HEAD~1&#xff08;等同于 git reset --mixed HEAD~1&#xff0…

机器学习OpenNLP

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl OpenNLP概述 OpenNLP是一个基于机器学习的自然语言处理开发工具包&#xff0c;它是Apache软件基金会的一个开源项目。OpenNLP支持多种自然语言处理任务&#xff0c;如分词、…

计算机网络:现代通信的基石

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何忽略Chrome最小字号的限制

通过控制台调整字体大小时&#xff0c;可以发现即便设置了小于12px的字号&#xff0c;也并不会变小&#xff0c;这是因为Chrome默认最小字号为12px。 在Chrome设置中的外观选项卡中可以发现&#xff0c;默认字体是16px。将最小字号改为0&#xff0c;就能随意设置小于12px的字号…

面向对象【枚举类】

文章目录 枚举类定义枚举类enum 方式定义的要求和特点 enum 中常用方法实现接口的枚举类 枚举类 枚举类是一种特殊的类&#xff0c;它用于定义一组固定数量的常量。枚举类在实际开发中非常有用&#xff0c;因为它们可以增加代码的可读性和可维护性。本文将介绍Java枚举类的定义…

[网鼎杯2018]Unfinish 两种方法 -----不会编程的崽

网鼎杯太喜欢搞二次注入了吧。上次是无列名盲注&#xff0c;这次又是二次注入盲注。。。不知道方法还是挺难的。哎&#xff0c;网鼎嘛&#xff0c;能理解透彻就很强了。能自己做出来那可太nb了。 又是熟悉的登录框。不知道这是第几次看见网鼎杯的登录框了。后台扫描一下&#x…

基于深度学习的海洋鱼类识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............................................................ % 对测试集进行分类预测 [Pr…

西安石油大学校赛培训(1)数学模型简介 初等模型

数学建模竞赛 什么是数学建模竞赛?数学竞赛给人的印象是高深莫测的数学难题,和一个人、一支笔、一张纸&#xff0c;关在屋子里的冥思苦想&#xff0c;它训练严密的逻辑推理和准确的计算能力&#xff0c;而数学建模竞赛从内容到形式与此都有明显的不同。 数学建模竞赛的题目由日…

高防服务器、高防IP、高防CDN的工作原理是什么

高防IP高防CDN我们先科普一下是什么是高防。“高防”&#xff0c;顾名思义&#xff0c;就犹如网络上加了类似像盾牌一样很高的防御&#xff0c;主要是指IDC领域的IDC机房或者线路有防御DDOS能力。 高防服务器主要是比普通服务器多了防御服务&#xff0c;一般都是在机房出口架设…

学点儿Java_Day10_集合框架(List、Set、HashMap)

1 简介 ArrayList: 有序(放进去顺序和拿出来顺序一致)&#xff0c;可重复 HashSet: 无序(放进去顺序和拿出来顺序不一定一致)&#xff0c;不可重复 Testpublic void test1() {String[] array new String[3];//List: 有序 可重复//有序: 放入顺序 与 拿出顺序一致&#xff0c;…

Github多账号共存

在开发阶段&#xff0c;如果同时拥有多个开源代码托管平台的账户&#xff0c;在代码的管理上非常麻烦。那么&#xff0c;如果同一台机器上需要配置多个账户&#xff0c;怎样才能确保不冲突&#xff0c;不同账户独立下载独立提交呢&#xff1f; 我们以两个github账号进行演示 …

基于STM32的最小系统电路设计(手把手零基础教学)

文章目录 前言一、复位电路二、晶振电路三、电源转换电路四、SWD下载电路五、LED测试电路六、芯片外扩引脚七、STM32微控制电路总结 前言 在上篇介绍完《STM32的核心板制作流程》后&#xff0c;本篇我们将开始学习STM32最小系统电路的设计。具体包括复位电路、晶振电路、电源转…

快速入门go语言

环境搭建 编译器安装 1、编译器下载地址 2、打开命令行模式&#xff0c;输入go version ide安装 ide下载地址 依赖管理 goproxy 1、goproxy代理地址 // 阿里云 https://mirrors.aliyun.com/goproxy // 微软 https://goproxy.io // 七牛 https://goproxy.cn 2、ide配置g…

io的学习4

打印流 分类&#xff1a;打印流一般是指&#xff1a;PrintStream、PrintWriter两个类 特点&#xff1a; 1.打印流只操作文件目的地&#xff0c;不操作数据源 2.特有的写出方法可以实现&#xff0c;数据原样写出 3.特有的写出方法&#xff0c;可以实现自动刷新&#xff0c;…

openGauss + Datakit搭建openGauss运维平台

系统架构OS 硬件需求&#xff1a;2c4g [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# uname -m x86_64 [rootlocalhost ~]# hostname -I 192.168.92.32 下载地址&#xff1a;https://opengauss.org/zh/download/ 下载…

软考高级架构师:MVP 架构概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Vue3+Element Plus+TS开发企业管理后台(一)

系列文章&#xff0c;讲述一个企业管理后台的前后端设计&#xff0c;持续集成常见的页面功能和服务端设计思路。 效果展示 支持多种布局、主题配色随意切换 侧边菜单背景设置 主题色调切换 移动端完美适配 菜单侧边收起&#xff0c;适合移动端小空间场景。 功能开发计划 #merm…

YOLOv9代码解读[01] readme解读

文章目录 YOLOv9COCO数据集上指标&#xff1a;环境安装训练验证重参数化 Re-parameterization推断相关链接 YOLOv9 paper: YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information github: https://github.com/WongKinYiu/yolov9 COCO数据集上指…

virtualBox:新增NVMe控制器报错:VERR_PDM_DEVICE_NOT_FOUND

目录 1.virtualBox:版本&#xff1a;6.1 2.虚拟机配置&#xff1a;增加了一个NVMe协议的控制器&#xff0c;并增加了一块VDI的虚拟磁盘空间 3.确定报错弹框信息&#xff1a; 4.解决方案&#xff1a;根据提示信息&#xff0c;前往挂网下载扩展插件包&#xff0c;下载好并将其…

flask_restful规范返回值之参数设置

设置重命名属性和默认值 使用 attribute 配置这种映射 , 比如&#xff1a; fields.String(attributeusername) 使用 default 指定默认值&#xff0c;比如&#xff1a; fields.String(defaultsxt) from flask import Flask,render_template from flask_restful import A…