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 intfor {j += 1fmt.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 stringprice 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 []*Goodsfor _, item := range allGoods {saleGoods = append(saleGoods,&item)}fmt.Println(saleGoods)

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

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

item := itemsaleGoods = 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])}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pillow教程05:NumPy数组和PIL图像的相互转化

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

SpringBoot 文件上传(三)

之前讲解了如何接收文件以及如何保存到服务端的本地磁盘中&#xff1a; SpringBoot 文件上传&#xff08;一)-CSDN博客 SpringBoot 文件上传&#xff08;二&#xff09;-CSDN博客 这节讲解如何利用阿里云提供的OSS&#xff08;Object Storage Service)对象存储服务保存文件。…

vite5+vue3+ import.meta.glob动态导入vue组件

import.meta.glob 是 Vite 提供的一个特殊功能&#xff0c;它允许你在模块范围内动态地导入多个模块。这在处理大量的文件&#xff0c;如组件、页面或其他模块时特别有用&#xff0c;特别是当你需要根据某些条件或模式来动态加载它们时。 1.创建需要动态导入的组件目录 假设你…

设计模式—观察者模式与发布订阅

观察者设计模式 观察者设计模式&#xff08;Observer Design Pattern&#xff09;是一种常用的软件设计模式&#xff0c;它是一种行为型模式。该模式用于定义对象之间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到通知…

FTP 文件传输服务

FTP连接 控制连接&#xff1a;TCP 21&#xff0c;用于发送FTP命令信息 数据连接&#xff1a;TCP 20&#xff0c;用于上传、下载数据 数据连接的建立类型&#xff1a; 主动模式&#xff1a;服务端从 20 端口主动向客户端发起连接 被动模式&#xff1a;服务端在指定范围…

flask_restful数据解析

参数验证也叫参数解析 Flask-Restful 插件提供了类似 WTForms 来验证提交的数据是否合法 的包&#xff0c;叫做 reqparse 。 # Flask_RESTFUl数据解析 from flask import Flask,render_template from flask_restful import Api,Resource from flask_restful.reqparse import …

项目3-留言板

1.创建项目 记得将project type改为maven 将需要的包引入其中 更改版本号 引入MYSQL相关包记得进行配置&#xff01;&#xff01;&#xff01; spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncodingutf8&useSSLfalseusername: rootpassword:…

用redis lua脚本实现时间窗分布式限流

需求背景&#xff1a; 限制某sql在30秒内最多只能执行3次 需求分析 微服务分布式部署&#xff0c;既然是分布式限流&#xff0c;首先自然就想到了结合redis的zset数据结构来实现。 分析对zset的操作&#xff0c;有几个步骤&#xff0c;首先&#xff0c;判断zset中符合rangeS…

使用JMeter进行梯度压测

使用JMeter进行梯度压测 梯度压测配置如下&#xff1a; 使用线程:5&#xff0c;然后循环5000次&#xff0c;共2.5万个样本使用线程:10&#xff0c;然后循环5000次&#xff0c;共5万个样本使用线程:15&#xff0c;然后循环5000次&#xff0c;共7.5万个样本使用线程:20&#xff…

Redis中的事件

事件 概述 Redis服务器是一个事件驱动程序:服务器需要处理以下两类事件: 1.文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接&#xff0c;而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或者其他服务器)的通信会产生相应的文件…

上位机图像处理和嵌入式模块部署(qmacvisual自定义插件代码分析)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 qmacvisual里面的第三方插件主要由两部分组成&#xff0c;一部分是ExtensionLibrary&#xff0c;也就是插件的容器&#xff0c;这个是官方提供的&a…

【机器学习】贝叶斯上篇(详解)

深入理解贝叶斯学习&#xff1a;核心原理及应用全解析 在机器学习的领域内&#xff0c;贝叶斯学习作为一种强大的框架&#xff0c;使我们能够在不确定性条件下进行预测和决策。贝叶斯学习源于托马斯贝叶斯的工作&#xff0c;提供了一种概率论的学习方法&#xff0c;与传统的频…

荟萃分析R Meta-Analyses 3 Effect Sizes

总结 效应量是荟萃分析的基石。为了进行荟萃分析&#xff0c;我们至少需要估计效应大小及其标准误差。 效应大小的标准误差代表研究对效应估计的精确程度。荟萃分析以更高的精度和更高的权重给出效应量&#xff0c;因为它们可以更好地估计真实效应。 我们可以在荟萃分析中使用…

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

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

Spring - AOP/事务 实现原理

AOP 基本概念 官方文档&#xff1a; Aspect Oriented Programming with Spring Spring AOP supports the following AspectJ pointcut designators (PCD) for use in pointcut expressions: within - limits matching to join points within certain types (simply the exec…

Visual Studio项目编译和运行依赖第三方库的项目

1.创建项目&#xff0c;这里创建的项目是依赖于.sln的项目&#xff0c;非CMake项目 2.添加第三方库依赖的头文件和库文件路劲 3.添加第三方依赖库文件 4.项目配置有2个&#xff0c;一个是Debug&#xff0c;一个是Release&#xff0c;如果你只配置了Debug&#xff0c;编译和运行…

Unity 视频组件 VideoPlayer

组件添加&#xff1a; 在自己定义的组件下&#xff08;例如&#xff1a;Panel&#xff09; 点击 Inspector 面板中的 AddComponent &#xff0c;输入“VideoPlayer”。 资源 这里 视频资源有两种形式&#xff0c;第一种是 VideoClip &#xff0c;需要将视频文件拖拽到该属性字段…

喜报 | 聚合科技荣获江苏省数字经济学会科学技术奖

近日&#xff0c;江苏省数字经济学会公布了2023年度江苏省数字经济学会科学技术奖获奖名单。本次在全省范围内共评选出科学技术进步奖、科学技术创新奖、优秀成果奖获奖项目共计19项。“聚合数据资产服务API平台”凭借其前沿的创新性和优秀的应用前景成功获得科学技术创新奖二等…

说说Loader和Plugin的区别?编写Loader,Plugin的思路?

文章目录 一、区别二、编写loader三、编写plugin参考文献 一、区别 前面两节我们有提到Loader与Plugin对应的概念&#xff0c;先来回顾下 loader 是文件加载器&#xff0c;能够加载资源文件&#xff0c;并对这些文件进行一些处理&#xff0c;诸如编译、压缩等&#xff0c;最终…

基于TensorFlow的花卉识别(算能杯)%%%

Anaconda Prompt 激活 TensorFlow CPU版本 conda activate tensorflow_cpu //配合PyCharm环境 直接使用TensorFlow1.数据分析 此次设计的主题为花卉识别&#xff0c;数据为TensorFlow的官方数据集flower_photos&#xff0c;包括5种花卉&#xff08;雏菊、蒲公英、玫瑰、向日葵…