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

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

目录

[1. if 语句](#1. if 语句)

[2. switch语句](#2. switch语句)

[3. for语句](#3. for语句)

[4. range语句](#4. range语句)

[5. goto语句(不常用)](#5. goto语句(不常用))

[6. 补充break和continue](#6. 补充break和continue)


1. if 语句

语法格式:

(1)单分支:

if 条件语句 {

...

}

或者

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

...

}

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

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

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

简单示例:

  • 示例1:单分支
Go 复制代码
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:多分支
Go 复制代码
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:

Go 复制代码
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:

Go 复制代码
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累加运算

Go 复制代码
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。
  • 可忽略某个返回值。
  • 语法格式可参照:

简单示例代码:

Go 复制代码
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:

Go 复制代码
package main

//import "fmt"

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

break运行结果

(2)使用continue:

Go 复制代码
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:

Go 复制代码
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 可以用在任何地方,但是不能跨函数使用。
相关推荐
然然阿然然26 分钟前
2025.2.1——八、Web_php_wrong_nginx_config
网络·学习·安全·网络安全·php
egoist202327 分钟前
数据结构之栈和队列(超详解)
c语言·开发语言·数据结构·算法·leetcode·栈和队列·学习成长
依瑾雅39 分钟前
Assembly语言的正则表达式
开发语言·后端·golang
Giser@lin42 分钟前
Python安居客二手小区数据爬取(2025年)
开发语言·redis·python
依瑾雅1 小时前
Scheme语言的正则表达式
开发语言·后端·golang
2501_902556231 小时前
编程语言90种
开发语言
0xCC说逆向1 小时前
Windows图形界面(GUI)-QT-C/C++ - QT Stacked Widget
c语言·开发语言·c++·windows·qt·win32
车载诊断技术1 小时前
车载软件架构 --- 软件定义汽车面向服务架构的应用迁移
开发语言·人工智能·架构·汽车·人机交互·智能电动汽车的三智和三电
马船长1 小时前
CTFHub信息泄露PHPINFO
学习
look_outs1 小时前
PyQt4学习笔记2】Qt 的 Model/View 架构
数据库·笔记·python·qt·学习·架构·pyqt