go141.net forum.php,Golang——流程控制

常用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)

}

}

}

有疑问加站长微信联系(非本文作者)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值