条件语句

IF ELSE

通用格式

  if的条件语句是不用小括号的,如果满足条件即执行{}里的代码.

package main

import "fmt"

// 输入i为int类型,返回值为string类型
func Condition(i int) string {
    if i < 10 {
        return "参数小于10"
    } else if i > 10 {
        return "参数大大于0"
    } else {
        return "ok"
    }
}

func main() {
    i := 3
    val := Condition(i)
    fmt.Print(val)
}

特殊格式

  可在if的条件判断语句之前加上执行语句.如下判断三角形是否为直角三角形.

在条件里赋值只可在条件语句中使用,出了作用域是无效的

package main

import (
    "fmt"
    "math"
)

// 输入i为int类型,返回值为code,msg.类型为int和string
func Condition(i, k, l int) (code int, msg string) {
  // 声明z变量.为ik的平方根. 判断l与k
    if z := int(math.Sqrt(float64(i*i + k*k))); l != z {
        code = -1
        msg = "不是直角三角形"
    }else{
        code = 0
        msg = "是直角三角形"
    }
    return code, msg
}

func main() {
    i, j, k := 3, 4, 5
    code,msg:=Condition(i, j, k)
    fmt.Println(code)
    fmt.Println(i,j,k,msg)
}

  在Condition函数中有两个返回值.而在接受的时候也需要两个返回值.但是当不想要其中一个返回值的时候可以使用_接受.将mian函数修改为下.

func main() {
    i, j, k := 3, 4, 5
    // 用_接受code.就不需要声明变量接受并使用
    _,msg:=Condition(i, j, k)
    fmt.Println(i,j,k,msg)
}

SWITCH

  在case为独立的代码块,当执行完会自动跳出结束,不像PHP需要结束case要使用break,如需要继续执行其他case需要使用fallthrough.

package main

import "fmt"

// 传入a,b为int类型 counterType为string类型
// 返回res 为int类型
func counter(a, b int, counterType string) (res int) {
    switch counterType {
    case "+":
        res = a + b
    case "-":
        res = a - b
    case "*":
        res = a * b
    case "/":
        res = a / b
    }
    return res
}

func main() {
    // 声明两数a,b以及计算类型counterType
    a, b, counterType := 3, 4, "+"
    // 声明res结果为 counter方法返回值
    res := counter(a, b, counterType)
    // 打印结果
    fmt.Print(a, counterType, b, "=", res)
}

  switch可以不使用表达式,在case里使用判断,例如将counter函数修改为

// 传入a,b为int类型 counterType为string类型
// 返回res 为int类型
func counter(a, b int, counterType string) (res int) {
    switch {
    case counterType == "+":
        res = a + b
    case counterType == "-":
        res = a - b
    case counterType == "*":
        res = a * b
    case counterType == "/":
        res = a / b
    }
    return res
}

fallthrough

  举一个比较蠢的例子,判断传入值z与2的关系.当传入值为2的时候打印结果c=1.可见进入了switch只执行了case<=2.当在第一个case加上fallthrough输出结果为2.进入了<=2==2的case体.可见case如果不加fallthrough会只执行当前满足条件的case.存在fallthrough会执行下一个满足条件的case.

package main

import "fmt"

func test(z int) (c int) {
    c = 0
    switch {
    case z <= 2:
        c += 1
            // fallthrough
    case z == 2:
        c += 1
            // fallthrough
    case z >= 2:
        c += 1
    default:
        c += 1
    }
    return c
}

func main() {
    x := test(2)
    // 打印结果
    fmt.Print(x)
}

循环语句

基础循环

  for的表达式同样不使用()进行包裹.可使用continue跳出当前循环继续循环和break跳出当前整个循环体.

package main

import "fmt"

func main() {
    sum := 0
      // 求1~10的和
    for i := 1; i <= 10; i++ {
        sum += i
    }
    fmt.Print(sum)
}

  同样在循环体中定义的变量只能在当前作用域下(for循环内)有效,如需要后续用到变量可以将;前的内容空着不写,例如

func main() {
    sum := 0
    i := 1
    for ; i <= 10; i++ {
        sum += i
    }
    fmt.Print(sum)
}

  相对于写死循环更加优雅哈(for{ 循环体 }).

// 死循环
for {
    fmt.Print(1)
}

健值循环

  使用for range进行数组遍历

package main

import "fmt"

func main() {
    // 声明2个长度的string类型数组
    arr := [2]string{"go", "php"}
    for key, value := range arr{
        fmt.Printf("key is %d value is %s\n",key,value)
    }
}
Last modification:March 18th, 2020 at 02:40 pm