1. if 语句
1.1. if 语句的格式
if condition {coding} else if condition {coding} else {coding}
1.2. 案例
package mainimport "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 mainimport "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.go1x1=11x2=2 2x2=41x3=3 2x3=6 3x3=91x4=4 2x4=8 3x4=12 4x4=161x5=5 2x5=10 3x5=15 4x5=20 5x5=251x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=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 mainimport "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 mainimport "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 mainimport "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 mainimport "fmt"// 跳出循环: break/continuefunc main() {var name string = "abcdef"for _, s := range name {if s == 'c' {continue} else if s == 'e' {break}fmt.Printf("%c\t", s)}}
package mainimport "fmt"// 跳出多层循环func main() {var flag boolfor 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 = truebreak}}if flag {break}fmt.Println()}}
4.2. goto
goto语句是先定义一个label,这个标签内部写跳出循环时执行的语句,在循环体中当满足特定条件时,立刻跳到定义好的label代码块 , 这种在嵌套循环中非常好用。
package mainimport "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()}
