1. if 语句
1.1. if 语句的格式
if condition {
coding
} else if condition {
coding
} else {
coding
}
1.2. 案例
package main
import "fmt"
import "strings"
func main() {
if sal := 15000; sal >= 20000 { // 此时sal 为if 语句块中的局部变量
fmt.Println("核心员工")
} else if sal >= 15000 {
fmt.Println("骨干员工")
} else {
fmt.Println("非核心员工")
}
id := "wb2020030501"
if strings.HasPrefix(id, "wb") {
fmt.Print("外包员工")
}
}
e:\OneDrive\Projects\Go\src\gitee.com\studygo\day01\04-condition>go run main.go
骨干员工
外包员工
2. for循环
2.1. for语句格式
1. 循环式
# 这种模式下,初始值可以放到for循环外,结束语句也可以放入循环体中
for 初始值; 条件; 结束语句 {
循环体
}
2. 迭代取值
# 这种循环下,可以遍历字符串、数组等
for a, b := range s {
循环体
}
3. 无限循环
for {
循环体
}
2.2. 案例
package main
import "fmt"
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%dx%d=%d\t", j, i, j*i)
}
fmt.Println()
}
}
e:\OneDrive\Projects\Go\src\gitee.com\studygo\day01\05-for>go run main.go
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
3. switch case
3.1. 几种场景
1. 判断一个变量的值是否等于某个值,其中name可以在switch之外赋值,也可以在switch内,如switch name := 1;name {}
switch name {
case v1:
代码块
case v2:
代码块
case v3:
代码块
default: // 可选
默认代码块
}
2. 上述代码块的case可以使用一个值,也可以使用多个值
switch name {
case v1,v2,v3 :
代码块
case v4:
代码块
case v5:
代码块
default:
默认代码块
}
3. 判断对象放到case内部
switch {
case name > v1:
代码块
case name > v2:
代码块
case name > v3:
代码块
default:
默认代码块
}
3.2. 案例
3.2.1. 案例一
package main
import "fmt"
func main() {
inputArg := "stop"
switch inputArg {
case "start":
fmt.Println("systemctl start httpd")
case "stop":
fmt.Println("systemctl stop httpd")
case "restart":
fmt.Println("systemctl restart httpd")
}
}
3.2.2. 案例二
package main
import "fmt"
func main() {
switch serviceName := "MySQL"; serviceName {
case "httpd", "nginx":
fmt.Println("web service")
case "docker", "kubernetes":
fmt.Println("container service")
case "Keepalived":
fmt.Println("High ")
default:
fmt.Println("others service")
}
}
3.2.3. 案例三
package main
import "fmt"
func main() {
// 这段代码只是示例,没有实际意义
switch port := 677724; {
case port == 22:
fmt.Println("sshd service")
case port == 80 || port == 8080:
fmt.Println("Web service")
case port > 32768 && port < 65535:
fmt.Println("others service")
case port > 65535:
fmt.Println("the port maybe error!")
}
}
4. 跳出循环
4.1. break/continue
package main
import "fmt"
// 跳出循环: break/continue
func main() {
var name string = "abcdef"
for _, s := range name {
if s == 'c' {
continue
} else if s == 'e' {
break
}
fmt.Printf("%c\t", s)
}
}
package main
import "fmt"
// 跳出多层循环
func main() {
var flag bool
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d x %d = %d\t", j, i, j*i)
if j > 5 {
flag = true
break
}
}
if flag {
break
}
fmt.Println()
}
}
4.2. goto
goto语句是先定义一个label,这个标签内部写跳出循环时执行的语句,在循环体中当满足特定条件时,立刻跳到定义好的label代码块 , 这种在嵌套循环中非常好用。
package main
import "fmt"
// 对上述嵌套循环代码的简化
func main() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d x %d = %d\t", j, i, j*i)
if j > 5 {
goto BreakLoop
}
}
fmt.Println()
}
BreakLoop:
fmt.Println()
}