if分支语句
普通if
resp, err := http.Get(url)
if err != nil {
log.Fatal(fmt.Sprintf("请求异常, url: %s", url))
} else if {
} else {
}
赋值if
var nameList []string
if err := json.Unmarshal([]byte(jsonData), &nameList); err != nil {
log.Fatal(err)
}
switch分支语句
普通switch
func main() {
// 普通switch
switch 2 {
case 1:
fmt.Println(1)
case 2:
fmt.Println(2)
case 3, 4, 5:
fmt.Println("3, 4, 5")
default:
fmt.Println("default")
}
判断switch
很神奇,可以代替多个if条件判断
// 省略变量, 相当于作用于bool类型
func main() {
age := 18
switch {
// 条件为true是 执行内容
case age > 10:
fmt.Println("age > 10")
case age > 8:
fmt.Println("age > 8")
default:
fmt.Println("default")
}
}
}
console
age > 10
赋值switch
func main() {
switch name := "shenzhen"; name {
case "shenzhen":
fmt.Println("shenzhen")
case "foshan":
fmt.Println("foshan")
default:
fmt.Println("default")
}
}
带跳出的switch
golang的switch case自带一个break
如果需要向下执行可以使用fallthrough
func main() {
// break 强制跳出, 不执行 "gd3"
switch name := "gd"; name {
case "gd":
fmt.Println("gd1")
fmt.Println("gd2")
break
fmt.Println("gd3")
}
fmt.Println("-0----")
switch name := "sz"; name {
case "sz":
fmt.Println("深圳1")
fmt.Println("深圳2")
fmt.Println("深圳3")
// 执行完 case = "sz"后, 不跳出, 继续执行 case = "gz"
fallthrough
case "gz":
fmt.Println("广州")
}
}
console:
gd1
gd2
-0----
深圳1
深圳2
深圳3
广州
for循环语句
for (init; condition; post) {}
Init: 初始化,只执行一次
condition: bool类型,
普通for
func main() {
for i := 0; i < 5; i ++ {
fmt.Println(i)
}
}
外部初始化for
func main() {
i := 0
for i <= 5 {
fmt.Println(i)
i ++
}
}
死循环
func main() {
for {
fmt.Println()
}
}
for循环中的跳转
func main() {
for i := 1; i <= 5; i++ {
// 跳出整个循环
if i == 4 {
break
}
// 跳出当前循环进行下一次循环
if i < 3 {
continue
}
fmt.Println(fmt.Sprintf("i = %v", i))
}
// 多层循环可通过定义标签跳转, 在for循环中break和goto都可以完成
lable:
for i := 1; i <= 5; i++ {
for j := i; j <= 5; j++ {
if i == j {
break lable
}
if j > 3 {
goto lable
}
}
}
}
for循环实现冒泡
升序冒泡
func main() {
arr := []int{1, 2, 5, 2, 22, 1}
// len(arr) - 1, 对比时, 最后一位必须要对比
for i := 0; i < len(arr) - 1; i++ {
// j := i + 1, 对比时, 内层for循环无需从第一个开始比对, 即第一个(外层for)和第二个(内层for)比对
// len(arr) 对比时, 最后一位参与上一层for循环的对比
for j := i + 1; j < len(arr); j++ {
if arr[i] > arr[j] {
// 如果当前的数字, 大于后面的数字, 就把当前数字往后移
arr[i], arr[j] = arr[j], arr[i]
}
}
}
for _, num := range arr {
fmt.Println(num)
}
}
console:
1
1
2
2
5
22
return跳出语句
func main() {
returnTest(1)
}
func returnTest(i uint) {
if i > 0 {
return
}
fmt.Println("i <= 0")
}