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