常用if
和for
,switch
和goto
属于扩展的
注意:Go 没有三目运算符
,所以不支持 ...?...:...
形式的条件判断。
1.条件语句 if else
func main() {
a := 1
if a < 0 {
fmt.Println("小于0")
} else if a == 0 {
fmt.Println("等于0")
} else {
fmt.Println("大于0")
}
}
注意:
1.不需要使用括号()
将条件包含起来;
2.无论语句体内有几条语句,花括号{}
都是必须存在的;
3.左花括号{
必须与if
或者else
在同一行;
4.在if之后,条件语句之前,可以添加变量初始化语句,使用;
间隔;
5.在有返回值的函数中,不允许将“最终的”return
语句包含在if
... else
...结构中,否则编译报错。
if判断特殊写法
在if之后,条件语句之前,可以添加变量初始化语句,使用;
间隔
func main() {
if a := 1; a < 0 {
fmt.Println("小于0")
} else if a == 0 {
fmt.Println("等于0")
} else {
fmt.Println("大于0")
}
}
2.选择语句
switch case
func main() {
a := 1
switch a {
case 0: fmt.Println("0")
case 1: fmt.Println("1")
default: fmt.Println("other")
}
a := 3
switch a {
case 0:
fmt.Println("0")
case 1:
fmt.Println("1")
default:
fmt.Println("other")
}
}
注意:
1.左花括号{
必须与switch
在同一行;
2.条件表达式不限制为常量或者整数;
3.单个case中,可出现多个结果选项;
4.Go语言不需要break
来明确跳出一个case;
5.只有在case
中明确添加fallthrough
关键字,才会继续执行紧跟的下一个case
;
6.可以不设定switch
之后的条件表达式,此时与if
... else
...逻辑左右等。
func main() {
switch a := 1; a {
case 0, 2:
fmt.Println("0或者2")
case 1, 3:
fmt.Println("1或者3")
default:
fmt.Println("other")
}
}
func main() {
a := 1
switch {
case a > 1:
fmt.Println("大于1")
case a == 1:
fmt.Println("等于1")
default:
fmt.Println("小于")
}
}
fallthrough
可以无条件的执行下一个case,为了兼容C语言而设计,已经是deprecated。
func main() {
a := 1
switch {
case a > 1:
fmt.Println("大于1")
case a == 1:
fmt.Println("等于1")
fallthrough
case a == 0:
fmt.Println("等于0")
default:
fmt.Println("小于0")
}
}
// 等于1
// 等于0
select
用于管道类型
select {
case communication clause :
statement(s);
case communication clause :
statement(s);
/* 你可以定义任意数量的 case */
default : /* 可选 */
statement(s);
}
3.循环语句
只支持for,不支持while、do-while等。
for
for 初始化语句; 条件表达式; 结束语句 {
循环体语句
}
注意:
1.左花括号{
必须与for
在同一行;
2.可以在循环条件中的定义和初始化变量,但是,不支持以逗号为间隔的多个赋值语句;
3.使用 break
、continue
可控制循环;
func main() {
array := []byte{1, 2, 3}
for i := 0; i < len(array); i++ {
fmt.Println(array[i])
}
//初始语句可以被忽略,但是分号需要保留
i := 0
for ; i < len(array); i++ {
fmt.Println(array[i])
}
//初始语句和结束语句都可以省略
//此写法类似其它编程语言中的while
j := 0
for j < len(array){
fmt.Println(array[j])
j++
}
//无限循环
for {
//通过break、goto、return、panic语句强制退出循环
}
}
break(跳出循环),可以结束for
、switch
、select
的代码块。
break也可以添加标签,表示退出代码块,必修定义在对应的for
、switch
、select
的代码块上。尽量少用。
func main() {
BREAKTAG:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++{
if j == 3 {
// break //跳出当前for循环
// continue //继续下一次循环
break BREAKTAG
}
fmt.Printf("%d-%d\n",i, j)
}
}
fmt.Printf("break跳出")
}
continue(继续下次循环)
只用在 for
循环中。
continue也可以加标签,尽量少用。
for range(键值循环)
可遍历数组、切片、字符串、map以及channel
1.数组、切片、字符串返回索引和值;
2.map返回键和值;
3.channel只返回通道内的值;
func main() {
str := "Hello"
for k,v := range str {
fmt.Printf("%d-%c\n", k, v)
}
}
中英文混杂的字符串,需要用for range循环
4.跳转语句
goto,尽量少用
func main() {
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++{
if j == 3 {
// break //跳出当前for循环
// continue //继续下一次循环
goto gotoTag
}
fmt.Printf("%d-%d\n",i, j)
}
}
gotoTag:
fmt.Printf("goto跳出")
}
练习题
99乘法表
for i := 1; i < 10; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d * %d = %d ", j, i, i * j)
}
fmt.Print("\n")
}
水仙花数
水仙花数是指一个3位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)
package main
import (
"fmt"
"math"
)
func main(){
fmt.Println("11")
fmt.Println(math.Pi)
for i := 100; i < 1000; i++ {
//百位
a := i/100
// fmt.Println(a)
//十位
b := i%100/10
// fmt.Println(b)
//个位
c := i%100%10
// fmt.Println(c)
sum := math.Pow(float64(a), 3) + math.Pow(float64(b), 3) + math.Pow(float64(c), 3)
// fmt.Println(sum)
if int(sum) == i {
fmt.Printf("%d^3+%d^3+%d^3=%d\n", a, b, c, int(sum))
}
}
}
200~1000以内的素数
package main
import (
"fmt"
)
//质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
func isSushu(x int)bool{
for i := 2; i < x; i++ {
if x%i == 0 {
return false
}
}
return true
}
func main(){
for i := 200; i < 1000; i++ {
// 用函数
// if isSushu(i) {
// fmt.Println(i)
// }
//不用函数
isSushuFlag := true
for j := 2; j < i; j++ {
if i%j == 0 {
isSushuFlag = false
break
}
}
if isSushuFlag {
fmt.Println(i)
}
}
}
有疑问加站长微信联系(非本文作者)