当前位置: 首页 > article >正文

Go语言之路————条件控制:if、for、switch

Go语言之路————if、for、switch

  • 前言
  • if
  • for
  • switch
  • goto和label

前言

  • 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程,如果你也是个小白或者转Go语言的,希望我这篇文章对你有所帮助。
  • 有关go其他基础的内容的文章大家可以查看我的主页,接下来主要就是把这个系列更完,更完之后我会在每篇文章中挂上连接,方便大家跳转和复习。

if

go中的if语句,和Java中的大差不差,唯一的差别就是,条件判断语句不需要加括号,看看下面这个例子:

func main() {
	ifTest(-2)
	ifTest(1)
	ifTest(20)
}

func ifTest(num int) {
	if num < 0 {
		fmt.Println("这是一个负数")
	} else if num < 10 {
		fmt.Println("小于10的整数")
	} else {
		fmt.Println("大于10的整数")
	}
}

//输出结果:
这是一个负数
小于10的整数
大于10的整数

for

在go中,可以说if和for是使用最多的,而 for循环又是花样最多的,可以有很多语法糖,java中就有很多,fori 、增强for、foreach,go也是一样的,只是写法有略微不同

  1. 我们先看看最常见的fori:

    func main() {
    	for i := 0; i < 10; i++ {
    		fmt.Println(i)
    	}
    }
    

    我们咋一眼看过去,是不是和java的一模一样,只是有细微的差别,比如i的定义、for后面的逻辑没有括号包裹,大家有没有发现,go中就是不喜欢用括号把我们的语句包裹起来,是为了简洁吗?

  2. 我们还可以一次性初始化多个变量,多个判断语句
    下面这个例子就是同时定义i和j两个变量,然后去做循环和条件判断处理

    	for i, j := 0, 0; i < 10 && j < 20; i, j = i+1, j+2 {
    		fmt.Println(i, j)
    	}
    
  3. go中没有while关键词,用for就可以来表示while
    当我们只保留循环条件,那么for就变成了while

    func main() {
    	a := 1
    	for a < 10 {
    		a++
    	}
    }
    

    如果我们要实现while(true),那么我们就不加循环条件,下面这个案例就是一个死循环,程序会一直执行a++

    func main() {
    	a := 1
    	for {
    		a++
    	}
    }
    
  4. for range
    for range可以更加方便的遍历一些可迭代的数据结构,如数组,切片,字符串,映射表,通道。语句格式如下:

    for index, value := range iterable {
    	
    }
    

    在这个格式中,index代表我们的下标,而value代表的是值,类似与这种表达式返回两个值的,后面我们会经常遇到,如果我们只想关注其中一个,那么可以用_下划线代替,比如上面的案例可以这样写:对于不想处理的index或者value,用_代替后,编辑器就不会报错了。

    	for _, value := range iterable {
    		
    	}
    	for index, _ := range iterable {
    		
    	}
    
  5. 用range遍历一个字符串

    str := "hello world"
    for index, value := range str {
    	fmt.Println(index, value)
    }
    输出:
    0 104
    1 101
    2 108
    3 108
    4 111
    

    为何输出的是数字,因为go中默认输出的是Unicode码,要想输出字母可以用fmt.printf结合%c来转换。
    6. break
    和java中的break一样,终止循环的关键字,这里就不展开说明了
    7. continue
    和java中的continue一样,这里就不展开说明了
    当然,正如前面说的,range用的最多的就是遍历数组、切片、map等,后面我们讲到的时候会再次提及。

switch

go中的switch也是和Java的大差不差,也是switch关键字后面参数没有括号,我们直接看案例:

func main() {
	switchTest(1)
	switchTest(2)
	switchTest(22)
}

func switchTest(num int) {
	switch num {
	case 1:
		fmt.Println(1)
	case 2:
		fmt.Println(2)
	default:
		fmt.Println("任何数")
	}
}

//输出:
1
2     
任何数

当然,switch还有很多变种写法,比如我们要判断的值不是参数传进来的,而是某个方法返回来的:

func main() {
	switchTest()
}

func switchTest() {
	switch num := getNum(); {
	case num == 1:
		fmt.Println(1)
	case num == 2:
		fmt.Println(2)
	default:
		fmt.Println("任何数")
	}
}

func getNum() int {
	return 1
}

//输出1

fallthroug:这个关键词代表着执行当前分支之后,程序不break,不管判断条件强制执行下一个分支,我们如果在上面的案例中加入这个关键字,就会输出1,2

```go
func main() {
	switchTest()
}

func switchTest() {
	switch num := getNum(); {
	case num == 1:
		fmt.Println(1)
		fallthrough
	case num == 2:
		fmt.Println(2)
	default:
		fmt.Println("任何数")
	}
}

func getNum() int {
	return 1
}

//输出1,2

goto和label

goto和label是使用比较多的,当然break,continue也是能搭配label进行逻辑跳转,下边我们定义一个标签A:

A:
	fmt.Println("跳转到A标签")

然后我们结合goto,用一个简单的案例看看是怎么使用的:

func main() {
	test()
}

func test() {
	for i := 0; i < 10; i++ {
		if i == 3 {
			goto A
		}
		fmt.Println(i)
	}
A:
	fmt.Println("跳转到A标签")
}


输出:
0
1
2
跳转到A标签

通过输出我们看到,在for循环中,我们如果进行了goto的跳转,会终止当前的for循环。

到这里,go中的条件控制常用的就讲完了,下一篇我们将进入重头戏,说一下go中使用最多的两个数据结构:切片和map


http://www.kler.cn/a/506683.html

相关文章:

  • 我的世界-与门、或门、非门等基本门电路实现
  • 达梦8-DMSQL程序设计学习笔记1-DMSQL程序简介
  • 学习threejs,使用OrbitControls相机控制器
  • sparkSQL练习
  • 细说STM32F407单片机窗口看门狗WWDG的原理及使用方法
  • AIGC时代 | 探索AI Agent的奥秘:四种设计模式引领未来智能趋势
  • Oracle EBS GL定期盘存WIP日记账无法过账数据修复
  • Go语言封装加解密包(AES/DES/RSA)
  • Sprint Boot教程之五十八:动态启动/停止 Kafka 监听器
  • 说说Babylon.js中scene.deltaTime的大坑
  • 如何异地远程访问本地部署的Web-Check实现团队远程检测与维护本地站点
  • 《DeepSeek V3:重新定义AI大模型的效率与成本》
  • Qt实现防止程序多次运行
  • Java学习教程,从入门到精通,JDBC数据库连接语法知识点及案例代码(92)
  • Outlook 无网络连接[2604] 错误解决办法
  • python批量doc转pdf调用提示库未注册
  • 华北水利水电大学第十届ACM/ICPC程序设计新生赛题解
  • Django Admin 实战:实现 ECS 集群批量同步功能
  • 【6】Word:海名公司文秘❗
  • SuperMap iClient3D for Cesium立体地图选中+下钻特效
  • 【Docker】使用Dev Container进行开发
  • HTML 中的 Window 和 Document 介绍
  • 【Uniapp-Vue3】manifest.json配置
  • 前后端分离开发心得
  • 十分钟带汝入门大数据开发语言Scala
  • 序列化和反序列化 Json 字符串 @JSONField