条件语句
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)
}
} 
