Go学习:Go语言中if、switch、for语句与其他编程语言中相应语句的格式区别
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
}
(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
}
(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")
}
6. 补充break和continue
- break 跳出当前循环;
- continue 跳过本次循环;
- 注意:break 可用于 for、 switch、 select,而continue 仅能用于for 循环。
- goto 可以用在任何地方,但是不能跨函数使用。