基础语法
if
if判断定义格式:
if 条件 {
程序段
} else if 条件 {
程序段
} else {
程序段
}
1)可通过&&(与)或||(或)运算符实现多条件判断;
2)可在条件前添加执行语句,并以“;”分隔(在判断条件前会执行该语句);
3)条件语句前的执行语句创建的对象仅在执行if语句时有效;
如:在if条件前添加执行语句影响最终结果
1)编写程序;
package main
import "fmt"
func main() {
var i int
if num := 2; num == 0 {
i = 1
} else if num = 1; num == 1 {
i = 2
} else {
i =3
}
fmt.Println(i)
}
2)运行结果;
for
Go中for循环的定义格式分为两种:基于条件、基于数据集合
1)循环内部创建的变量总是使用同一块内存地址;
(1)for循环定义格式(基于条件):
for 语句1; 判断条件; 语句2 {
程序段
}
1)语句1在for循环开始前执行,语句2则在循环每进行一次后执行;
2)若省略全部语句和“;”,则代表为无限循环;
3)也可仅指定多个判断条件(&和|连接);
//类似C/C++中的for循环(除没有()括住语句的差别)
(2)for循环定义格式(基于数据集合):
for 值1, 值2 := range 数据 {
程序段
}
1)返回值的个数由指定的数据集合返回的值的多少决定(常为2个);
2)源码中第二种for循环是基于第一种for循环实现的;
//但第二种for循环可优雅遍历字符串、Slice、map和channel的功能
for-range循环须知:
1)作用于值为nil的通道时会永久阻塞;
2)for-range在循环开始前就已确定循环次数;
3)由于循环次数已确定,不可在循环过程中添加元素;
4)遍历Slice时不能通过返回值修改Slice的源数据(返回值是拷贝数据);
//遍历map时虽未指定循环次数,但期间添加元素仍可能遍历不到
如:通过基于数据集合的for循环输出切片内容
1)编写程序;
package main
import (
"fmt"
"sync"
)
func main() {
s := []int{1, 2, 3}
var wg sync.WaitGroup
wg.Add(len(s))
for _, v := range s {
go func() {
fmt.Println(v) //当goroutine启动时,外层循环已遍历到值3
wg.Done() //可通过参数传递解决(每次循环立刻调用变量)
}()
}
wg.Wait()
}
2)运行结果;
switch
Go中switch分支的定义格式分为两种:switch判断、case判断
1)分支中程序段可添加fallthrough关键词,代表无论下个分支是否成立都执行
//前提是该分支成立后,fallthrough关键词才可发挥作用
(1)switch分支定义格式(switch判断):
switch 判断条件 {
case 分支1:
程序段
case 分支2, 分支3:
程序段
default:
程序段
}
1)可指定多个分支为同一情况;
2)默认所有分支都不满足,则执行默认分支(default);
(2)switch分支定义格式(case判断):
switch {
case 判断条件1:
程序段
case 判断条件N:
程序段
default:
程序段
}
如:通过switch分支进行输出
1)编写程序;
2)运行结果;
多重赋值
多重赋值:多个变量可一次性被赋值,即使赋值公式中调用被赋值的对象
1)本质:先计算右表达式的值并存储在内存中,再从内存中取出值赋值于左边
2)Go中赋值过程可使用空标识符“_”(下划线)表示将该值丢弃;
如:通过多重赋值实现查找两个数的最大公约数
1)编写程序;
2)运行结果;