Go语言基础四
今天我们要来学习if语句,也就是大家口中的判断语句,我们首先来看一下if语句的定义
if定义
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。相信读者看到这儿,也是云里雾里的感觉,我们怎么来表示true和false呢?
单层if语法格式
- 可省略条件表达式括号。
- 持初始化语句,可定义代码块局部变量。
- 代码块左 括号必须在条件表达式尾部。
if 布尔表达式 {
/* 在布尔表达式为 true 时执行 */
}
truefalse
package main
import "fmt"
func main() {
a := 3
if a > 2 {
fmt.Println("true")
} else {
fmt.Println("false")
}
}
truefalse
语法警告
在Go语法中,不支持三元操作符(三目运算符) a > b ? a : b,如果读者对三元运算符较感兴趣,可以移步至java了解三元运算符(其本质上也是一种if判断形式)
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 10
/* 使用 if 语句判断布尔表达式 */
if a < 20 {
/* 如果条件为 true 则执行以下语句 */
fmt.Printf("a 小于 20\n" )
}
fmt.Printf("a 的值为 : %d\n", a)
}
iftruefalseelse
package main
import "fmt"
func main() {
/* 局部变量定义 */
var a int = 100
/* 判断布尔表达式 */
if a < 20 {
/* 如果条件为 true 则执行以下语句 */
fmt.Printf("a 小于 20\n" )
} else {
/* 如果条件为 false 则执行以下语句 */
fmt.Printf("a 不小于 20\n" )
}
fmt.Printf("a 的值为 : %d\n", a)
}
Go语言
多层if语法格式
if 布尔表达式 1 {
/* 在布尔表达式 1 为 true 时执行 */
if 布尔表达式 2 {
/* 在布尔表达式 2 为 true 时执行 */
}
}
package main
import "fmt"
func main() {
/* 定义局部变量 */
var a int = 100
var b int = 200
/* 判断条件 */
if a == 100 {
/* if 条件语句为 true 执行 */
if b == 200 {
/* if 条件语句为 true 执行 */
fmt.Printf("a 的值为 100 , b 的值为 200\n" )
}
}
fmt.Printf("a 值为 : %d\n", a )
fmt.Printf("b 值为 : %d\n", b )
}
if
Switch
Switch定义
switchcaseGolang switchbreak
Switch语法格式
switch var1 {
case val1:
...
case val2:
...
default:
...
}
package main
import "fmt"
func main() {
/* 定义局部变量 */
var grade string = "B"
var marks int = 90
switch marks {
case 90: grade = "A"
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch {
case grade == "A" :
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" )
}
fmt.Printf("你的等级是 %s\n", grade )
}
Switchcase
Type Switch
switchtype-switch
Type Switch语法格式
switch x.(type){
case type:
statement(s)
case type:
statement(s)
/* 你可以定义任意个数的case */
default: /* 可选 */
statement(s)
}
Type Switch
Select定义
selectswitchselectcasecasecaseselectGoswitchcaseselectcasecasecase
Select语法格式
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
Select语句注意事项
casechannelcasedefaultdefaultselectGochannel
package main
import "fmt"
func main() {
var c1, c2, c3 chan int //通道机制
var i1, i2 int
select {
case i1 = <-c1:
fmt.Printf("received ", i1, " from c1\n")
case c2 <- i2:
fmt.Printf("sent ", i2, " to c2\n")
case i3, ok := (<-c3): // same as: i3, ok := <-c3
if ok {
fmt.Printf("received ", i3, " from c3\n")
} else {
fmt.Printf("c3 is closed\n")
}
default:
fmt.Printf("no communication\n")
}
}
c1、c2、c3chanintchannelchan intdefaultno communication
Select用法补充
selectchannelselectswitchselectcaseswitchselectcaseIO操作caseGo语言defaultselectcasedefault
超时判断
var resChan = make(chan int)
// do request
func test() {
select {
case data := <-resChan:
doData(data)
case <-time.After(time.Second * 3):
fmt.Println("request time out")
}
}
func doData(data int) {
//...
}
selectcaseresChandatacase
退出
var shouldQuit=make(chan struct{})
fun main(){
{
//loop
}
//...out of the loop
select {
case <-c.shouldQuit:
cleanUp()
return
default:
}
//...
}
//在另外一个协程中,如果运行遇到非法操作或不可处理的错误,就向shouldQuit发送数据通知程序停止运行
close(shouldQuit)
shouldQuitcaseshouldQuit
判断Channel状态
ch := make (chan int, 5)
//...
data:=0
select {
case ch <- data:
default:
}
selectdefault语句