Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别

news2025/2/2 0:54:54

Go语言中的流程控制语句逻辑结构与其他编程语言类似,格式有些不同。Go语言的流程控制中,包括if、switch、for、range、goto等语句,没有while循环

目录

1. if 语句

 2. switch语句

 3. for语句

4. range语句

5. goto语句(不常用)

6. 补充break和continue


1. if 语句

语法格式:

(1)单分支:

if 条件语句 {

        ...

}

或者

if 变量初始化; 条件语句{

        ...

}

(2)多分支:if...else  或者  if ... elseif ...else

多分支的语法格式参照简单示例。

  • if 语句是一种选择结构;
  • Go语言中,if 判断条件的 条件表达式没有括号;
  • if 语句 支持1个初始化表达式,初始化语句和条件表达式之间需要用分号分隔;
  • if 语句程序体{...} 中的左括号{ 和 if 要在同一行;
  • else 后面没有条件

简单示例:

  • 示例1:单分支
package main

import "fmt"

func main() {
	s := "苹果"
	//if和{就是条件,条件通常就是关系运算符
	//if 判断条件的 条件表达式没有括号
	if s == "橘子" { //左括号和 if 要在同一行
		fmt.Println("橘子,不是苹果")
	}

	//if 语句 支持1个初始化语句,初始化语句和判断条件以分号分隔
	if a := 10; a == 10 { //条件为真,指向{}
		fmt.Println("a==10")
	}

}

        输出结果:

  •  示例2:多分支
package main

import "fmt"

func main() {
	//第1种写法
	a := 10
	if a == 10 {
		fmt.Println("a == 10")
	} else { //else后面没有条件
		fmt.Println("a != 10")
	}

	//第2种写法
	if a := 10; a == 10 {
		fmt.Println("a == 10")
	} else { //else后面没有条件
		fmt.Println("a != 10")
	}

	//第3种写法,多分支
	a = 8
	if a == 10 {
		fmt.Println("a == 10")
	} else if a > 10 {
		fmt.Println("a > 10")
	} else if a < 10 {
		fmt.Println("a < 10")
	} else {
		fmt.Println("这是不可能的")
	}

	//第4种写法,多分支
	if a := 8; a == 10 {
		fmt.Println("a == 10")
	} else if a > 10 {
		fmt.Println("a > 10")
	} else if a < 10 {
		fmt.Println("a < 10")
	} else {
		fmt.Println("这是不可能的")
	}

}

        输出结果:

 2. switch语句

 switch语句的语法格式参照简单示例代码中的格式。

  • switch语句也是一种选择结构;
  • switch后面写的是变量本身
  • switch语句中case最后可写可不写break,因为Go中默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch;
  • 可以使用fallthrough强制执行后面的case代码;
  • 可以使用任何类型或表达式作为条件语句
  • switch语句支持1个初始化语句,初始化语句和变量本身之间,需要用分号分隔,如示例2;
  • switch语句后面 可以没有条件,而可以把条件放在case后面,如示例2;
  • case后面可以跟多个值,如示例2;

简单示例:

(1)示例1:

package main

import "fmt"

func main() {
	//num := 1
	var num int
	fmt.Printf("请按下楼层:")
	fmt.Scan(&num)

	switch num { //switch后面写的是变量本身
	case 1:
		fmt.Println("按下的是1楼")
		//break //Go语言保留了break关键字,用于跳出switch语句,不写,默认就包含
		//fallthrough  //不跳出switch语句,后面的无条件执行
	case 2:
		fmt.Println("按下的是2楼")
		//break
		//fallthrough
	case 3:
		fmt.Println("按下的是3楼")
		//break
		//fallthrough
	case 4:
		fmt.Println("按下的是4楼")
		//break
		//fallthrough
	default:
		fmt.Println("按下的是xxx楼")
	}
}

运行结果:

  • 不使用fallthrough的运行结果: 

  • 使用fallthrough的运行结果:

(2)示例2:

package main

import "fmt"

func main() {
	//支持一个初始化语句,初始化语句和变量本身之间,需要用分号分隔
	switch num := 4; num { //switch后面写的是变量本身
	case 1:
		fmt.Println("按下的是1楼")

	case 2:
		fmt.Println("按下的是2楼")

	case 3, 4, 5:
		fmt.Println("按下的是yyy楼")

	case 6:
		fmt.Println("按下的是6楼")

	default:
		fmt.Println("按下的是xxx楼")
	}

	score := 85
	switch { //可以没有条件
	case score > 90: //case后面可以放条件
		fmt.Println("优秀")
	case score > 80: //case后面可以放条件
		fmt.Println("良好")
	case score > 70: //case后面可以放条件
		fmt.Println("一般")
	default:
		fmt.Println("其它")

	}
}

运行结果:

 3. for语句

 Go中for语句格式与C/C++中的 for语句格式类似,其语法格式为:

for  初始化条件; 判断条件; 条件变化{

}

  • i++ 只有后置,没有前置,即Go中不存在 ++i,只有 i++;

简单示例:实现1+2+3+...+100累加运算

package main

import "fmt"

func main() {
	// for  初始化条件; 判断条件; 条件变化{
	// }
	//实现1+2+3+...+100累加运算
	
	//1) 初始化条件 i := 1
	//2) 判断条件是否为真,i <= 100,如果为真,执行循环体,如果为假,跳出循环
	//3) 条件变化 i++ 
	//4) 重复 2,3,4

	sum := 0
	for i := 1; i <= 100; i++ {
		sum = sum + i
	}
	fmt.Println("sum = ", sum)

}

运行结果:

4. range语句

  • 用于迭代
  • 关键词range会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值。
  • 支持 string / array / slice /  map。
  • 可忽略某个返回值。
  • 语法格式可参照:

简单示例代码:

package main

import "fmt"

func main() {

	str := "abc"

	/*打印每个字符*/
	//1.传统写法:通过for打印每个字符
	for i := 0; i < len(str); i++ {
		fmt.Printf("str[%d] = %c\n", i, str[i])
	}

	//2.借助range,迭代打印每个元素,默认返回2个值:一个是元素的值,一个是元素本身
	for i, data := range str {
		fmt.Printf("str[%d] = %c\n", i, data)
	}
	//2.1 丢弃第2个返回值的第一种写法
	for i := range str { //第2个返回值,默认丢弃,即返回元素的位置(下标)
		fmt.Printf("str[%d] = %c\n", i, str[i])
	}

	//2.2 丢弃第2个返回值的第二种写法,等价于第一种写法
	for i, _ := range str { //第2个返回值,默认丢弃,即返回元素的位置(下标)
		fmt.Printf("str[%d] = %c\n", i, str[i])
	}

}

运行结果:

5. goto语句(不常用)

语法格式:

        goto  标签

        ...

标签 : 

        ...

  • goto 可以用在任何地方,但是不能跨函数使用;
  • 用 goto 跳转到标签, 从标签处,执行代码;
  • 标签 必须在当前函数内定义;
  • 用法参考简单示例:

简单示例:

(1)使用break:

package main

//import "fmt"

func main() {
	break //break is not in a loop, switch, or select
}
break运行结果

(2)使用continue:

package main

//import "fmt"

func main() {
	//break //break is not in a loop, switch, or select
	continue  //  continue is not in a loop
}
continue运行结果

(3) 使用goto:

package main

import "fmt"

func main() {
	//break //break is not in a loop, switch, or select
	// continue  // continue is not in a loop

	//goto 可以用在任何地方,但是不能跨函数使用
	fmt.Println("111111111111111111")

	goto End //goto是关键字, End是用户起的名字,叫做标签

	fmt.Println("2222222222222222222")

End:
	fmt.Println("3333333333333333333")

}
goto运行结果

6. 补充break和continue

  • break 跳出当前循环;
  • continue 跳过本次循环;
  • 注意:break 可用于 for、 switch、 select,而continue 仅能用于for 循环
  • goto 可以用在任何地方,但是不能跨函数使用。

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

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

相关文章

14-8C++STL的queue容器

一、queue容器 (1)queue容器的简介 queue为队列容器&#xff0c;“先进先出”的容器 (2)queue对象的构造 queue<T>q; queue<int>que Int;//存放一个int的queue容器 queue<string>queString;//存放一个string的queue容器 (3)queue容器的push()与pop()方…

【B站保姆级视频教程:Jetson配置YOLOv11环境(四)cuda cudnn tensorrt配置】

Jetson配置YOLOv11环境&#xff08;4&#xff09;cuda cudnn tensorrt配置 文章目录 0. 简介1. cuda配置&#xff1a;添加cuda环境变量2. cudnn配置3. TensorRT Python环境配置3.1 系统自带Python环境中的TensorRT配置3.2 Conda 虚拟Python环境中的TensorRT配置 0. 简介 官方镜…

信号模块--simulink操作

位置simulink/sourses 常用的模块 功能&#xff1a;常数模块&#xff0c;提供一个常数 数据设置可以是一维或多维 一维数据设置 多维数据设置&#xff08;例三维数据设置&#xff09; 方波脉冲模块 模块用于按固定间隔生成方波脉冲信号 振幅就是方波的幅度&#xff0c;0到…

强化学习笔记(3)——基于值函数的方法和策略梯度方法

分为两大类方法&#xff1a; 基于值函数的方法&#xff08;Temporal Difference Methods, TD Methods&#xff09; 策略梯度方法&#xff08;Policy Gradient Methods&#xff09;。 二者不同之处&#xff1a; 通过值函数来间接表达隐式的策略&#xff0c;一个是直接迭代优化策…

新年新挑战:如何用LabVIEW开发跨平台应用

新的一年往往伴随着各种新的项目需求&#xff0c;而跨平台应用开发无疑是当前备受瞩目的发展趋势。在众多开发工具中&#xff0c;LabVIEW 以其独特的图形化编程方式和强大的功能&#xff0c;为开发跨平台应用提供了有效的途径。本文将深入探讨如何运用 LabVIEW 开发能够在不同操…

事务04之死锁,锁底层和隔离机制原理

死锁和事务底层原理 文章目录 死锁和事务底层原理一&#xff1a;MySQL中的死锁现象1&#xff1a;何为死锁1.1&#xff1a;死锁的概念1.2&#xff1a;死锁产生的四个必要条件&#xff1a; 2&#xff1a;MySQL的死锁2.1&#xff1a;死锁的触发2.2&#xff1a;MySQL的死锁如何解决…

Golang 并发机制-2:Golang Goroutine 和竞争条件

在今天的软件开发中&#xff0c;我们正在使用并发的概念&#xff0c;它允许一次执行多个任务。在Go编程中&#xff0c;理解Go例程是至关重要的。本文试图详细解释什么是例程&#xff0c;它们有多轻&#xff0c;通过简单地使用“go”关键字创建它们&#xff0c;以及可能出现的竞…

【4Day创客实践入门教程】Day0 创想启程——课程与项目预览

Day0 创想启程——课程与项目预览 目录 Day0 创想启程——课程与项目预览前言学习内容基本的单片机开发技能简单的焊接技能简单的MicroPython程序 后记 Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机与MicroPython初步Day3 实战演练——桌面迷你番茄钟Day4 迈…

洛谷P3372 【模板】线段树 1以及分块

【模板】线段树 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 k k k。求出某区间每一个数的和。 输入格式 第一行包含两个整数 n , m n, m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 …

(动态规划基础 打家劫舍)leetcode 198

已知h2和h1&#xff0c;用已知推出未知 推是求答案&#xff0c;回溯是给答案 这里图片给出dfs暴力&#xff0c;再进行记录答案完成记忆化搜索&#xff0c;再转为dp数组 #include<iostream> #include<vector> #include<algorithm> //nums:2,1,1,2 //dp:2,2,…

Python 梯度下降法(四):Adadelta Optimize

文章目录 Python 梯度下降法&#xff08;四&#xff09;&#xff1a;Adadelta Optimize一、数学原理1.1 介绍1.2 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法&#xff08;四&#xff09;&#xff1a;Adadelta Opt…

旅行的意义:“诗与远方”和在旅途中找寻真我

原文链接&#xff1a;旅行的意义&#xff1a;“诗与远方”和在旅途中找寻真我 困在格子间&#xff0c;心向远方 清晨&#xff0c;闹钟催促&#xff0c;打工人挣扎起床出门。地铁拥挤&#xff0c;工作繁忙&#xff0c;加班成常态&#xff0c;下班时夜幕已深&#xff0c;满心疲惫…

leetcode——将有序数组转化为二叉搜索树(java)

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确答…

前端js高级25.1.30

原型&#xff1a;函数的组成结构 通过这个图我们需要知道。 假设我们创建了一个Foo函数。 规则&#xff1a;Function.protoType是函数显示原型。__proto__是隐式对象。 Function、Object、Foo函数的__proto__指向了Function.protoType说明。这三个都依托function函数来创建。…

【后端开发】字节跳动青训营之性能分析工具pprof

性能分析工具pprof 一、测试程序介绍二、pprof工具安装与使用2.1 pprof工具安装2.2 pprof工具使用 资料链接&#xff1a; 项目代码链接实验指南pprof使用指南 一、测试程序介绍 package mainimport ("log""net/http"_ "net/http/pprof" // 自…

云原生(五十二) | DataGrip软件使用

文章目录 DataGrip软件使用 一、DataGrip基本使用 二、软件界面介绍 三、附件文件夹到项目中 四、DataGrip设置 五、SQL执行快捷键 DataGrip软件使用 一、DataGrip基本使用 1. 软件界面介绍 2. 附加文件夹到项目中【重要】 3. DataGrip配置 快捷键使用&#xff1a;C…

FreeRTOS学习 --- 任务调度

开启任务调度器 作用&#xff1a;用于启动任务调度器&#xff0c;任务调度器启动后&#xff0c; FreeRTOS 便会开始进行任务调度 该函数内部实现&#xff0c;如下&#xff1a; 1、创建空闲任务&#xff08;优先级最低&#xff09; 2、如果使能软件定时器&#xff0c;则创建定…

2025年人工智能技术:Prompt与Agent的发展趋势与机遇

文章目录 一、Prompt与Agent的定义与区别(一)定义(二)区别二、2025年Prompt与Agent的应用场景(一)Prompt的应用场景(二)Agent的应用场景三、2025年Prompt与Agent的适合群体(一)Prompt适合的群体(二)Agent适合的群体四、2025年Prompt与Agent的发展机遇(一)Prompt的…

区块链 智能合约安全 | 回滚攻击

视频教程在我主页简介和专栏里 目录&#xff1a; 智能合约安全 回滚攻击 总结 智能合约安全 回滚攻击 回滚攻击的本质是”耍赖” 举一个简单的例子,两个人玩石头剪刀布,输了的给对方10块钱,现在A输了,A说这把不算,重来 放在Solidity中,require()函数会检测其中的条件是否满…

【JavaEE进阶】图书管理系统 - 壹

目录 &#x1f332;序言 &#x1f334;前端代码的引入 &#x1f38b;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f343;后端服务器代码实现 &#x1f6a9;登录接口 &#x1f6a9;图书列表接口 &#x1f384;前端代码实现 &#x1f6a9;登录页面 &#x1f6a9;…