1 流程控制之if else
一般写法
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}
实例
package main
import "fmt"
/** 分支结构
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-29 00:00:39
@version 1.0
*/
func main() {
a, b, c := 1, 2, 3
if a >b {
fmt.Println(a)
} else {
fmt.Println(c)
}
}
if else的特殊写法
if条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断
实例
package main
import "fmt"
/** if else的特殊写法
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-29 00:00:39
@version 1.0
*/
func main() {
if a := 3; a > 0 {
fmt.Println(a)
}
}
注意: Go语言规定与if
匹配的左括号{
必须与if和表达式
放在同一行,{
放在其他位置会触发编译错误。 同理,与else
匹配的{
也必须与else
写在同一行,else
也必须与上一个if
或else if
右边的大括号在同一行。
2 流程控制之switch
switch var1 {
case val1:
...
case val2:
...
default:
...
}
实例
package main
import "fmt"
/** switch语句
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-29 00:00:39
@version 1.0
*/
func main() {
switchTest(1)
}
func switchTest(a int) {
switch a {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
default:
fmt.Println(a)
}
}
注意 :
- switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一匹配,直到匹配对为止。
- switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break
type switch
switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。
switch x.(type){
case type:
statement(s);
case type:
statement(s);
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s);
}
实例
package main
import "fmt"
/** type switch
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-29 00:00:39
@version 1.0
*/
func main() {
switchTest("")
}
func switchTest( a interface{} ) {
switch a.(type) {
case int:
fmt.Println(1)
case float32:
fmt.Println(2)
default:
fmt.Println("未知的类型")
}
}
3 流程控制之 for循环
写法一
for init; condition; post { }
说明:
- init: 一般为赋值表达式,给控制变量赋初值;
- condition: 关系表达式或逻辑表达式,循环控制条件;
- post: 一般为赋值表达式,给控制变量增量或减量。
实例
package main
import "fmt"
/**for 循环演示
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 11:30:57
@version 1.0
*/
func main() {
forDemo(10)
}
func forDemo(y int) {
for x := 0; x < y; x++ {
fmt.Println("Hello World", x)
}
}
输出
Hello World 0
Hello World 1
Hello World 2
Hello World 3
Hello World 4
Hello World 5
Hello World 6
Hello World 7
Hello World 8
Hello World 9
写法二
for condition { }
实例
package main
import (
"fmt"
)
/**for 循环演示
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 11:30:57
@version 1.0
*/
func main() {
forDemo1()
}
func forDemo1() {
y := 0
for ; y < 10; y++ {
fmt.Println("Ferrayman",y)
}
}
输出
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 3
Ferrayman 4
Ferrayman 5
Ferrayman 6
Ferrayman 7
Ferrayman 8
Ferrayman 9
写法三
实例
package main
import (
"fmt"
)
/**for 循环演示
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 11:30:57
@version 1.0
*/
func main() {
forDemo2()
}
func forDemo2() {
x := 10
for x > 0 {
fmt.Println("Ferrayman", x)
x--
}
}
输出
Ferrayman 10
Ferrayman 9
Ferrayman 8
Ferrayman 7
Ferrayman 6
Ferrayman 5
Ferrayman 4
Ferrayman 3
Ferrayman 2
Ferrayman 1
4 流程控制之for range
Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:
- 数组、切片、字符串返回索引和值。
- map返回键和值。
- 通道(channel)只返回通道内的值。
这里先不展开细讲,以后学习到相关数据结构时再细说。
5 break跳出循环
break
语句可以结束for
、switch
和select
的代码块。
实例
package main
import (
"fmt"
)
/**break关键字的使用
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 22:45:55
@version 1.0
*/
func main() {
for j := 5; j > 0; j-- {
for i := 0; i < 5; i++ {
if i == 3 {
break
}
fmt.Println("Ferrayman",i)
}
}
}
输出
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 0
Ferrayman 1
Ferrayman 2
break
语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for
、switch
和 select
的代码块上。
package main
import (
"fmt"
)
/**break关键字的使用
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 22:45:55
@version 1.0
*/
func main() {
Tag:
for j := 10; j > 0; j-- {
for i := 0; i < 10; i++ {
if i == 5 {
break Tag
}
fmt.Println("Ferrayman",i)
}
}
}
输出
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 3
Ferrayman 4
6 continue跳过本次循环,继续下一次循环
实例
package main
import "fmt"
/**continue关键字的使用
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 22:45:55
@version 1.0
*/
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
fmt.Println("Ferrayman",i)
}
}
输出
Ferrayman 0
Ferrayman 1
Ferrayman 2
Ferrayman 3
Ferrayman 4
Ferrayman 6
Ferrayman 7
Ferrayman 8
Ferrayman 9
注意: continue仅限在for循环当中使用
6 goto关键字
Go 语言的 goto 语句可以无条件地转移到过程中指定的行。
不建议使用goto关键字。会让程序变得难以理解。
实例
package main
import (
"fmt"
)
/**goto关键字的使用
@author 赖柄沣 bingfengdev@aliyun.com
@date 2020-09-30 22:45:55
@version 1.0
*/
func main() {
Tag1:
fmt.Println("haha,我又来了")
for i := 0; i < 5; i++ {
if i == 3 {
goto Tag
}
fmt.Println("Ferrayman",i)
}
Tag:
fmt.Println("hehe,我出来了")
goto Tag1
}
输出
hehe,我出来了
haha,我又来了
Ferrayman 0
Ferrayman 1
Ferrayman 2
死循环。。。
而且第一次打印在程序的23行
(每次执行标签tag和tag1的执行顺序不太一样,个人感觉这应该和go语言对并行编程的设计有关)