Golang基础-3

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中条件语句、选择语句、循环语句、break、continue、goto关键字等相关知识。

基础

1. 条件语句
  • 实现程序逻辑时,需要通过不同的判断条件去执行相应的语句。
  • Go语言中的条件语句通过判断条件是否为 true/false 来决定执行相关语句。
  • Go语言中条件语句有 if、if else、if else if等
package main

import "fmt"

func main() {
	var a int = 16

	// 单分支,大括号必须存在,Go语言格式严格
	if a == 16 {
		fmt.Println("a == 16")
	}

	// 双分支
	a = 20
	if a != 20 {
		fmt.Println("a != 20")
	} else {
		fmt.Println("a == 20")
	}

	// 多分支,else if 分支任意数量、最后的 else 可选
	a = 40
	if a <= 20 {
		fmt.Println("a <= 20")
	} else if a <= 40 {
		fmt.Println("a <= 40")
	} else if a <= 60 {
		fmt.Println("a <= 60")
	} else {
		fmt.Println("a > 60")
	}

	// 局部变量,仅在条件语句作用域内可访问
	a = 30
	if s := 16; s == a {
		fmt.Println("s == a")
	} else {
		fmt.Println("s != a")
	}

	// 分支嵌套,可任意嵌套,实际开发中不要嵌套太多层,嵌套太多层的代码需要优化设计
	a = 80
	if a > 60 {
		if a > 80 {
			fmt.Println("a > 80")
		} else {
			fmt.Println("a <= 80")
		}
	} else if a > 40 {
		if a > 50 {
			fmt.Println("a > 50")
		} else {
			fmt.Println("a <= 50")
		}
	} else {
		fmt.Println("a <= 40")
	}
}

输出结果
a == 16
a == 20
a <= 40
s != a
a <= 80

2. 选择语句
  • 根据输入条件的不同选择不同的语句块进行执行(多分支)
  • 基本语法
switch 表达式 {
	case 值1, 值2... :
		语句块1
	case 值3, 值4... :
		语句块2
	...
	default : 
		语句块
}
  • switch后边是一个表达式(常量值、变量、具有返回值的函数等)
package main

import "fmt"

func main() {
	var a int = 16
	var str string = "id"
	const c int = 20

	// switch后边是常量值
	switch 20 {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println("***")
	}
	// switch后边是变量
	switch a {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(a)
	}
	// switch后边是常量
	switch c {
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(c)
	}
	// switch后边是字符串
	switch str {
	case "id":
		fmt.Println("id")
	default:
		fmt.Println(str)
	}
	// switch后边是函数
	switch getValue() {
	case 30:
		fmt.Println("30")
	default:
		fmt.Println("***")
	}
}

func getValue() int {
	return 30
}

输出结果
20
16
20
id
30

  • switch后边可不带表达式,当作if使用
package main

import "fmt"

func main() {
	var a int = 20
	// switch后边自定义局部变量
	switch {
	case a == 20:
		fmt.Println("a == 20")
	default:
		fmt.Println(a)
	}
}

输出结果:a == 20

  • switch后边可直接声明/定义一个变量,分号结束
package main

import "fmt"

func main() {
	// switch后边自定义局部变量
	switch s := 10; s {
	case 10:
		fmt.Println("10")
	default:
		fmt.Println(s)
	}
}

输出结果:10

  • switch语句分支Go语言默认执行完符合条件的case后会自动break(跳出switch语句块),若要执行完当前分支后继续执后一个分支,需要在分支中添加关键字fallthrough
package main

import "fmt"

func main() {
	var a int = 20
	// case 分支使用 fallthrough 穿透
	switch {
	case a == 20:
		fmt.Println("a == 20")
		fallthrough
	case a != 20:
		fmt.Println("a != 20")
	default:
		fmt.Println(a)
	}
}

输出结果
a == 20
a != 20

  • case后值的数据类型必须和switch后表达式的数据类型一致
  • case后可跟多个表达式,使用逗号分隔
package main

import "fmt"

func main() {
	var a int = 20
	// case 分支多个值
	switch a {
	case 10, 30:
		fmt.Println("10, 30")
	case 20:
		fmt.Println("20")
	default:
		fmt.Println(a)
	}
	// case 分支多个表达式
	switch {
	case a < 10, a > 30:
		fmt.Println("a < 10, a > 30")
	case a >= 10, a <= 30:
		fmt.Println("a >= 10, a <= 30")
	default:
		fmt.Println(a)
	}
}

输出结果
20
a >= 10, a <= 30

  • case后边为值时,各case分支的值不能重复
  • default语句是可选的
3. 循环语句
  • 实际需要重复执行一段代码时,需要循环结构
  • Go语言中使用 for 支持循环结构
  • break关键字用于跳出当前循环结构
  • continue关键字用于当前循环结构中,表示这一轮循环从当前位置结束,返回去重新开始执行下一轮循环
  • for 循环可嵌套,切记注意程序执行效率
  • for 循环基本语法格式
for 初始表达式; 布尔表达式; 迭代因子 {
	循环体
}
  • for-range 用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等
package main

import "fmt"

func main() {
	// 计算数字 1~100 加法
	var sum int = 0

	// 标准 for 循环
	for i := 1; i <= 100; i++ {
		sum += i
	}
	fmt.Println("1 sum: ", sum)

	// for 省略初始化因子
	sum = 0
	var i int = 1
	for ; i <= 100; i++ {
		sum += i
	}
	fmt.Println("2 sum: ", sum)

	// for 省略初始化因子、迭代因子,类似 while 循环
	sum = 0
	i = 1
	for i <= 100 {
		sum += i
		i++
	}
	fmt.Println("3 sum: ", sum)

	// 无限 for 循环
	sum = 0
	i = 1
	for {
		if i <= 100 {
			sum += i
		} else { // i > 100
			break // 注意此处使用 break 跳出 for 循环
		}
		i++
	}
	fmt.Println("4 sum: ", sum)
}

输出结果
1 sum: 5050
2 sum: 5050
3 sum: 5050
4 sum: 5050

package main

import "fmt"

func main() {
	// for-range
	var str string = "今天是sheme天气"
	for i, v := range str {
		fmt.Printf("index: %d, value: %c\n", i, v)
	}
}

输出结果
index: 0, value: 今
index: 3, value: 天
index: 6, value: 是
index: 9, value: s
index: 10, value: h
index: 11, value: e
index: 12, value: n
index: 13, value: m
index: 14, value: e
index: 15, value: 天
index: 18, value: 气

package main

import "fmt"

func main() {
	// for 循环嵌套
	for i := 1; i < 10; i++ {
		for j := i; j < 10; j++ {
			fmt.Printf("%v * %v = %v\t", i, j, i*j)
		}
		fmt.Printf("\n")
	}
}

输出结果
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5 1 * 6 = 6 1 * 7 = 7 1 * 8 = 8 1 * 9 = 9
2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18
3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27
4 * 4 = 16 4 * 5 = 20 4 * 6 = 24 4 * 7 = 28 4 * 8 = 32 4 * 9 = 36
5 * 5 = 25 5 * 6 = 30 5 * 7 = 35 5 * 8 = 40 5 * 9 = 45
6 * 6 = 36 6 * 7 = 42 6 * 8 = 48 6 * 9 = 54
7 * 7 = 49 7 * 8 = 56 7 * 9 = 63
8 * 8 = 64 8 * 9 = 72
9 * 9 = 81

  • break跳出循环体
package main

import "fmt"

func main() {
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时跳出 for 循环
			break
		}
		fmt.Println(i)
	}
}

输出结果
0
1

  • continue停止当前循环体,开始下一轮循环体
package main

import "fmt"

func main() {
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,重新执行下一轮循环
			continue
		}
		fmt.Println(i)
	}
}

输出结果
0
1
3

4. goto关键字
  • 尽量少使用 goto 关键字
  • 通过 goto 语句可以任意跳转到当前函数指定的 label 位置
package main

import "fmt"

func main() {
	fmt.Println("-----1-----")
	fmt.Println("-----2-----")
	fmt.Println("-----3-----")
	goto END
	fmt.Println("-----4-----")
	fmt.Println("-----5-----")
END:
	fmt.Println("-----6-----")
}

输出结果
-----1-----
-----2-----
-----3-----
-----6-----

  • break 和 continue 后也可以指定 label 用于指定跳出或跳过指定 label 同层级的循环
package main

import "fmt"

func main() {
END1:
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,执行跳转
			continue END1
		}
		fmt.Println("-----", i, "-----")
	}

END2:
	for i := 0; i < 4; i++ {
		if i == 2 { // 满足条件时,执行跳转
			break END2
		}
		fmt.Println("=====", i, "=====")
	}
}

输出结果
----- 0 -----
----- 1 -----
----- 3 -----
===== 0 =====
===== 1 =====

起始

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

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

相关文章

Makefile用法及变量

一、Makefile概述 自动化编译”&#xff1a;一旦写好&#xff0c;只需要一个make命令&#xff0c;整个工程完全自动编译&#xff0c;极大的提高了软件开发的效率。 提升编译效率&#xff1a;再次编译&#xff0c;只编译修改的文件。 通过检查时间来检查文件是否被修改过 二…

零拷贝技术探讨

零拷贝技术是一种用于提高数据传输效率的网络技术&#xff0c;主要应用于网络服务器中。它通过减少数据在操作系统内核空间和用户空间之间的复制次数来提高性能。 在传统的网络服务器中&#xff0c;当客户端向服务器发送请求时&#xff0c;服务器会从磁盘读取数据&#xff0c;…

3.亿级积分数据分库分表:ShardingSphere官方提供的平滑数据迁移方案介绍,有什么缺点呢?

前面的 2.亿级积分数据分库分表&#xff1a;增量数据同步之代码双写&#xff0c;为什么没用Canal&#xff1f; 博客中介绍了实现平滑数据迁移的两种方案&#xff1a;Canal监听MySQL的binlog、代码双写&#xff0c;也分别介绍了两种方案的实现原理及优缺点&#xff0c;最后基于…

VTK 9.2.6 源码和VTK Examples 编译 Visual Studio 2022

对于编译 VTK 源码和编译详细的说明&#xff1a; VTK 源码编译&#xff1a; 下载源码&#xff1a; 从 VTK 官方网站或者 GitHub 获取源代码。官网目前最近的9.3.0有问题&#xff0c;见VTK 9.3.0 编译问题 Visual Studio 2022去gitlab上选择9.2.6分支进行clone CMake 配置&…

Linux之文件系统

我们之前谈到的文件描述符fd,是与被加载到内存中的文件相关的&#xff0c;那么还有什么文件呢&#xff1f;磁盘文件 内存文件 ------ 断电失效 磁盘文件 ------ 不受断电的影响 磁盘存储器存、取信息的最基本单位是扇区。 —个扇区能存储512Bytes的数据,OS与磁盘交互的单位…

Spring-01

Spring 1.Spring是什么? spring是一个开源的Java应用框架&#xff0c;它提供了一套全面的基础设施支持 2.Spring框架的主要特点 1&#xff09;依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09; 2&#xff09;面向切面编程&#xff08;AOP&#xff09…

Redis命令-Key的层级结构

基础篇Redis 4.4 Redis命令-Key的层级结构 Redis没有类似MySQL中的Table的概念&#xff0c;我们该如何区分不同类型的key呢&#xff1f; 例如&#xff0c;需要存储用户.商品信息到redis&#xff0c;有一个用户id是1&#xff0c;有一个商品id恰好也是1&#xff0c;此时如果使…

长篇分享,如何学习电路设计?

本文来自看海原创视频教程&#xff1a;《运放秘籍》运算放大器基础精讲及应用第一部*开天 微信公众号&#xff1a;工程师看海 【淘宝】https://m.tb.cn/h.5PAjLi7?tkvmMLW43KO7q CZ3457 「运放秘籍_运算放大器Multisim仿真视频教程第一部开天_工程师看海」 点击链接直接打开 …

王道C语言督学营OJ课后习题(课时14)

#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode{BiElemType c;//c 就是书籍上的 datastruct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;//tag 结构体是辅助队列使用的 typedef struct tag{BiTree p;//树…

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系&#xff0c;他们唯一的不同在于z轴的方向&#xff0c;如下图&#xff0c;左边是左手坐标系&#xff0c;右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系&#xff08;Local Space&…

保理业务产品方案

常见的信贷业务流程 产品架构 一般分为贷前、贷中、贷后三个部分&#xff1a; 贷前一般处理客户入驻、资质审批、授信项目准入&#xff1b; 贷中一般处理处理具体的融资申请、审批、中登登记、资产锁定、放款事务&#xff1b; 贷后一般处理客户还款冲销、账款跟踪、到期日调整…

GRE_MGRE综合实验

目录 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址。 IP配置 配置公网全网通 2、&#xff08;1&#xff09;R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方。 PAP认证 &#xff08;2&#xff09;R2与R5之间使用ppp的CHAP认证&am…

顺序栈、链式栈、顺序队列、链式队列的ADT及其实现

顺序栈ADT及其实现 链式栈ADT及其实现 顺序队列的ADT及其实现 在数组中队首队尾的分配方案 第三中方案&#xff0c;即达到入队出队操作的时间代价是O&#xff08;1&#xff09; 同时可充分利用空间&#xff0c;不会出现空间似乎用完了的假象 时间性能和空间性能发挥到最大 链…

Qt FFmpeg开发环境配置以及测试 - 不编译源码

Qt FFmpeg环境配置以及测试 引言一、下载二、配置三、测试 引言 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。它采用了LGPL或GPL许可证&#xff0c;并提供了录制、转换以及流化音视频的完整解决方案。 FFmpeg包含了非常先进的…

【C++】map set

文章目录 1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set 的介绍3.1.2 set 的使用 3.2 map3.2.1 map 的介绍3.2.2 map 的使用 3.3 multiset3.3.1 multuset 的介绍3.3.2 multiset 的使用 3.4 multimap3.4.1 multimap 的介绍3.4.2 multimap 的使用 1. 关联式容器…

【文献分享】PyPlume程序:快速海洋表面传输评估的工具包

PyPlume: A toolkit for rapid ocean surface transport assessments PyPlume&#xff1a;快速海洋表面传输评估的工具包 PyPlume 是一个 Python 工具箱和管道&#xff0c;用于统一从模型和观测加载二维洋流矢量场、模拟轨迹模型以及分析和可视化粒子轨迹的过程。提供了 Ju…

Java_21 完成一半题目

完成一半题目 有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例…

python requirement.txt编译问题,代理问题为解决。

Date: 03/28/2024 11:00-12:00 Date: 03/27/2024 19:00-21:00 问题现象&#xff1a;开启代理后&#xff0c;无法正常下载 PS D:\workspace\winform\canvas\mysite依赖包> python -m pip install flatlib-0.2.3-py3-none-any.whl Looking in indexes: https://mirrors.ust…

WHM面板备份与恢复方法

上周有一个Hostease客户&#xff0c;购买了WHM面板的服务器&#xff0c;联系我们关于WHM面板中备份如何设置。接下来&#xff0c;我们分享如何在WHM面板中进行备份设置。 以下是在 WHM 面板中进行备份和恢复的基本步骤&#xff1a; 备份配置&#xff1a; 登录 WHM 控制面板&…

《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

目录 一、前言 二、官方网站下载 三、我的资源 四、编译器安装在 Keil 软件上 五、Keil选择编译器V5 “ V5.06 update 7(build 960) ” 六、测试 (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 一、前言 【Keil MDK-Arm5.37】不再…
最新文章