目录

一、条件判断

1. if

if 格式有两种写法:

package main

import "fmt"

func main() {
    a := 1
	if a < 10 {
		fmt.Println("第一种写法,此时a是函数体内的变量")
	}

	if b := 1; b < 10 {
		fmt.Println("第二种写法,此时b是if中的变量")
	}
}

2. if, else if, else

package

import "fmt"

func main() {
    source := 80
	if source > 90 {
		fmt.Println("优秀")
	} else if source >= 70 {
		fmt.Println("还行")
	} else {
		fmt.Println("啥也不是")
	}
}
二、循环体

1. for

for 循环的三种写法:

package main

import "fmt"

func main() {
    // for 第一种写法
	for i := 0; i < 10; i++ {
		fmt.Print(i) // 0123456789
	}

	// for 第二种写法
	j := 0
	for ; j < 10; j++ {
		fmt.Print(j) // 0123456789
	}

	// for 第三种写法
	k := 0
	for k < 10 {
		fmt.Print(k) // 0123456789
		k++
	}
}

2. for range

package main

import "fmt"

func main() {
    var str = "你好golang"
	for key, val := range str {
		fmt.Printf("key=%v val=%c\n", key, val) // 为什么val不用%v,因为%v获取的是ascii值
		/**
		结果如下:
			key=0 val=你
			key=3 val=好
			key=6 val=g
			key=7 val=o
			key=8 val=l
			key=9 val=a
			key=10 val=n
			key=11 val=g
		*/
	}

	var arr = []string{"php", "python", "java", "golang"} // 这叫切片不叫数组
	for k, v := range arr {
		fmt.Printf("key=%v val=%v\n", k, v)
		/**
		结果如下:
			key=0 val=php
			key=1 val=python
			key=2 val=java
			key=3 val=golang
		*/
	}
}

3. switch case

基本用法:

package main

import "fmt"

func main() {
    // switch case 不加break也可以,但是为了和其他语言一致,个人建议加上
	var ext = ".js"
	switch ext {
	case ".html":
		fmt.Println("text/html")
		break
	case ".css":
		fmt.Println("text/css")
		break
	case ".js":
		fmt.Println("text/javascript")
		break
	default:
		fmt.Println("格式错误")
		break
	}
}

 对比多个值

package main

import "fmt"

func main() {
    // case可以对比多个值
	var n = 2
	switch n {
	case 1, 3, 5, 7, 9:
		fmt.Println("奇数")
		break
	case 2, 4, 6, 8, 10:
		fmt.Println("偶数")
		break
	default:
		fmt.Println("啥也不是")
		break
	}

    // 第二种写法
	switch n2 := 2; n2 {
	case 1, 3, 5, 7, 9:
		fmt.Println("奇数")
		break
	case 2, 4, 6, 8, 10:
		fmt.Println("偶数")
		break
	default:
		fmt.Println("啥也不是")
		break
	}
}

case中有表达式

package main

import "fmt"

func main() {
    // case 表达式 switch 后面不再有参数
	age := 56
	switch {
	case age < 25:
		fmt.Println("好好学习")
		break
	case age >= 25 && age <= 59:
		fmt.Println("好好工作")
		break
	case age > 60:
		fmt.Println("享受吧")
		break
	default:
		fmt.Println("输入错误")
		break
	}
}

fallthrough 循环穿透

package main

import "fmt"

func main() {
    // switch中穿透 fallthrought 符合a条件同时手动符合b条件
	a := "a"
	switch a {
	case "a":
		fmt.Println("a")
		fallthrough
	case "b":
		fmt.Println("b")
		break
	default:
		fmt.Println("default")
		break
	}
}
三、跳出循环

1. break

跳出整个循环

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
		if i == 3 {
			break // 跳出循环
		}
		fmt.Println(i) // 0 1 2
	}

	for i := 0; i < 2; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				break // 跳出循环
			}
			fmt.Printf("i=%v j=%v\n", i, j) //i=0 j=0 i=0 j=1 i=1 j=0 i=1 j=1
		}
	}
}

 跳出指定标签循环

package main

import "fmt"

func main() {
label1:
	for i := 0; i < 2; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				break label1 // 跳出label1标签循环
			}
			fmt.Printf("i=%v j=%v\n", i, j) //i=0 j=0 i=0 j=1
		}
	}
}

2. continue

跳出本次循环

package main

import "fmt"

func main() {
    // continue 跳出本次循环
	for i := 0; i < 5; i++ {
		if i == 2 {
			continue
		}
		fmt.Println(i) // 0 1 3 4
	}

	for i := 0; i < 2; i++ {
		for j := 0; j < 4; j++ {
			if j == 2 {
				continue
			}
			fmt.Printf("i=%v j=%v\n", i, j) //i=0 j=0 i=0 j=1 i=0 j=3 i=1 j=0 i=1 j=1 i=1 j=3
		}
	}
}

 跳出本次指定标签的循环

package main

import "fmt"

func main() {
    label2:
	for i := 0; i < 2; i++ {
		for j := 0; j < 4; j++ {
			if j == 2 {
				continue label2
			}
			fmt.Printf("i=%v j=%v\n", i, j)
		}
	}
}

3. goto

跳到指定标签位置

package main

import "fmt"

func main() {
    // goto 跳到指定标签
	var n = 10

	if n > 6 {
		fmt.Println(n)
		goto label3
	}
	fmt.Println("a")
	fmt.Println("b")
label3:
	fmt.Println("c")
	fmt.Println("d") // 10 c d
}