【Go语言之路 基础篇】Go语言的条件控制语句和循环控制语句 if for

if语句

go语言的常用控制流程有if和for,没有while, 而switch和goto是为了简化代码,降低重复代码,属于扩展的流程控制。
if语句的结构:

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
}

if 布尔表达式 {
   /* 在布尔表达式为 true 时执行 */
} else {
  /* 在布尔表达式为 false 时执行 */
}

if 布尔表达式1 {
   /* 在布尔表达式1为 true 时执行 */
} else if 布尔表达式2{
   /* 在布尔表达式1为 false ,布尔表达式2为true时执行 */
} else{
   /* 在上面两个布尔表达式都为false时,执行*/
}
package main

import "fmt"

func main() {
	// if 语句
	num := 12
	if num%2 == 0 {
		fmt.Println("偶数")
	} else {
		fmt.Println("奇数")
	}

	score := 95
	if score >= 90 {
		fmt.Println("优秀")
	} else if score >= 80 {
		fmt.Println("良好")
	} else if score >= 60 {
		fmt.Println("合格")
	} else {
		fmt.Println("不合格")
	}
}

if还有一个变体也很常用

package main

import (  
    "fmt"
)

func main() {  
    if num := 10; num % 2 == 0 { //checks if number is even
        fmt.Println(num,"is even") 
    }  else {
        fmt.Println(num,"is odd")
    }
}
if err := Connect(); err != nil {
    
}

这种写法可 以将返回值与判断放在一行进行处理,而且返回值的作用范围被限制在if、 else 语句组合中。

提示:
在编程中,变量在其实现了变量的功能后 ,作用范围越小 ,所造成的问题可能性越小,每一个变量代表一个状态,有状态的地方,状态就会被修改,函数的局部变量只会影响一个函数的执行, 但全局变量可能会影响所有代码的执行状态,因此限制变量的作用范围对代码的稳定性有很大的帮助 。

package main

import (
	"errors"
	"fmt"
)

func test() error {
	return errors.New("error")
}

func main() {
	if err := test(); err != nil {
		fmt.Println("error happen")
	}
	fmt.Println(err) //此处会报错
}

for 循环

Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。

//和 C 语言的 for 一样:
for init; condition; post { }
//和 C 的 while 一样:
for condition { }
//和 C 的 for(;;) 一样:
for { }
  • init: 一般为赋值表达式,给控制变量赋初值;
  • condition: 关系表达式或逻辑表达式,循环控制条件;
  • post: 一般为赋值表达式,给控制变量增量或减量。

for语句执行过程如下:

  1. 先对表达式 1 赋初值;
  2. 判别赋值表达式 init 是否满足给定条件,若其值为真,满足循环条件,则执行循环体内语句,然后执行 post,进入第二次循环,再判别 condition;否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。

在这里插入图片描述

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

死循环:

for {
	fmt.Println("A")
}

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {
    newMap[key] = value
}
package main
import "fmt"

func main() {
		name := "hello world"
		for key, value := range name {
			// value 是ascii 
			fmt.Printf("index:%d, value:%c\n", key, value)
		}
		// 1.name是一个字符串,2.字符串是字符串的数组
		//index:0, value:h
		//index:1, value:e
		//index:2, value:l
		//index:3, value:l
		//index:4, value:o
		//index:5, value:
		//index:6, value:w
		//index:7, value:o
		
        strings := []string{"bobby", "imooc"}
        for i, s := range strings {
                fmt.Println(i, s)
        }
        //0 bobby
		//1 imooc


        numbers := [6]int{1, 2, 3, 5}
        for i,x := range numbers {
                fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
        }
}

汉字问题:

name := "你好go"

//fmt.Printf("%c\n", name[0])
for key, value := range name {
	fmt.Printf("index:%d, value:%c\n", key, value)
}
//index:0, value:你
//index:3, value:好
//index:6, value:g
//index:7, value:o
name_arr := []rune(name)
for i := 0; i < len(name_arr); i++ {
	fmt.Printf("value:%c\n", name_arr[i])
}
//value:你         
//value:好         
//value:g          
//value:o 
// 在做字符串遍历的时候尽量使用range
  1. name是一个字符串
  2. 字符串是字符串的数组
  3. 在做字符串遍历的时候尽量使用range
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叶柏杉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值