Golang基础

上一篇内容:Golang入门

流程控制

单分支控制

if语法格式:

// if 后面可以有一个语句
// 例如 if err:revover(); err!=nil {
   
if 条件表达式 {
   
    // 执行代码块
}

代码示例:

package main

import "fmt"

func main()  {
   
	var age int
	fmt.Println("请输入年龄:")
	fmt.Scanln(&age )
	if age > 18{
   
		fmt.Println("你年龄大于18,要对自己的行为负责!")
	}	

}

打印输出:

请输入年龄:
21
你年龄大于18,要对自己的行为负责!

双分支语句

if-else语法格式:

if 条件表达式 {
   
    // 执行代码块
}else{
   
    // 执行代码块
}

示例代码:

package main

import "fmt"

func main()  {
   
	var age int
	fmt.Println("请输入年龄:")
	fmt.Scanln(&age )
	if age > 18{
   
		fmt.Println("你年龄大于18,要对自己的行为负责!")
	}else{
   
		fmt.Println("你的年龄不大这次放过你了")
	}
}

打印输出:

请输入年龄:
13 
你的年龄不大这次放过你了

多分支判断

if else if

package main

import "fmt"

func main()  {
   
	var score int
	fmt.Println("请输入成绩:")
	fmt.Scanln(&score)
	if score > 18{
   
		fmt.Println("你年龄大于18,要对自己的行为负责!")
	}else if score > 80 && score <= 90{
   
		fmt.Println("你的年龄不大这次放过你了")
	}else if score >= 60 && score <=80{
   
		fmt.Println("奖励一个 ipad")
	}else{
   
		fmt.Println("什么都不奖励")
	}
}

打印输出:

请输入成绩:
12
什么都不奖励

switch…case 语句

  1. case/switch 后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
Golang基础_第1张图片
2. case后的各个表达式的值的数据类型,**必须和 switch 的表达式数据类型一致**。
Golang基础_第2张图片
3. case后面可以带**多个表达式,使用逗号间隔**。比如case表达式1,表达式2...
Golang基础_第3张图片
4. case后 面的表达式如果是**常量值(字面量)**,则 **要求不能重复**
Golang基础_第4张图片
5. case 后面不需要带 break ,程序匹配到一个 case 后就会执行对应的代码块,然后退出 switch,如果一个都匹配不到,则执行default。
  1. default 语句不是必须的。

  2. switch 后面可以不带表达式,类似 if-else 分支来使用。

Golang基础_第5张图片
8. switch 后也可以直接声明一个变量,分号结束,不推荐。
Golang基础_第6张图片
9. switch 穿透 flthrough,如果在 case 语句块后增加 fallthrough ,则会继续执行下一个case,也叫switch穿透。
Golang基础_第7张图片
10. Type Switch:switch 语句还可以被用于type -switch来判断某个interface 变量中实际指向的 变量类型【还没有学 interface】

switch 和 if 的比较

  • 如果判断的具体数据不多,并且符合整数、浮点数、字符、字符串这几种类型,建议使用 switch 语句,简洁高效。
  • 其他情况:对区间判断和结果为 bool 类型的判断,使用 if,if 使用范围更广。

循环语句

For 循环的表现形式

  1. 传统意义上的 for 循环。

Golang 里面的 for 循环和和传统的没太大的语法差别。而循环条件是返回一个布尔表达式。

package main
import (
	"fmt"
)

func main()  {
   
	for i:=1; i < 10; i++ {
   
		fmt.Println("hello world")
	}
}

这里最终运行完成之后, i 的值为 11

  1. for 循环的第二种方式:只有一个条件语句
    • 变量初始化变量迭代写到其它位置,相当于把 ; 给省略了。
// for 循环的第二种写法
j := 1  // 循环变量初始化
for j < 10{
    //  循环条件
    fmt.Println("hello world~~~")
    j++ //  循环变量迭代
}
  1. for 循环还可以什么条件都没有

这个书写形式也就是 Golang 当中 while 语句的书写形式,因此 Go 里面没有 while 或者 do while的书写形式。被整合进了 for 语句当中。

// for 循环的第三种写法,这种写法通常会配合 break 使用
k:=1
for {
   
    if k <= 10{
   
        fmt.Println("ok~")
    }else{
   
        break
    }
    k++
}
  1. for - range 表达式

假设我们现在要遍历一个字符串,传统上我们会如下进行遍历:

var s string = "qwer!"
for i := 0; i < len(s); i++ {
   
    fmt.Printf("%c\n", s[i])
}

而通过 for-range 我们可以这么遍历:

  • 对于 for-range 遍历方式而言,是按照字符方式进行遍历。
for index, value := range s{
   
    fmt.Printf("index=%d, value=%c\n",index, value)
}

打印输出:

index=0, value=q
index=1, value=w
index=2, value=e
index=3, value=r
index=4, value=!

注意事项和细节说明:

如果我们的字符串含有中文,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而一个汉字在 utf8 编码是对应 3 个字节。

如何解诀:

法1:需要要将 str 转成 []rune 切片。

	var s string = "qwer!项炤程"
	s2 := []rune(s)
	for i := 0; i < len(s2); i++ {
   
		fmt.Printf("%c\n", s2[i])
	}

法2:通过 for-range 的形式来进行遍历

	var s string = "qwer!项炤程"
	// for range 是按照字符的方式来进行遍历的
	for index, value := range s{
   
		fmt.Printf("index=%d, value=%c\n",index, value)
	}

练习

  • 打印1~100之间所有是9的倍数的整数的个数及总和
package main

import (
	"fmt"
)

func main() {
   
	var count int = 0
	var sum int = 0
	for i:=1;i<=100;i++{
   
		if i % 9 == 0{
   
			count ++
			sum += i
		}
	}
	fmt.Printf("count=%v,sum=%v\n", count, sum)
}

打印输出:

count=11,sum=594
  • 完成下面表达式输出:
0 + 6 = 6
1 + 5 = 6
2 + 4 = 6
3 + 3 = 6
4 + 2 = 6
5 + 1 = 6
6 + 0 = 6
	var sum int = 6
	for i := 0; i <=6; i ++{
   
		fmt.Printf("%v + %v = %v\n",i,sum - i,sum)
	}

break 关键字

break 用于终止 某个语句块,用于中断当前 for 循环或跳出 switch 语句:

	......
	break
	......
}
  • 随机打印 0-100 的整数,记录打印
	rand.Seed(time.Now().Unix())
	
	var count int = 0
	for{
   
		count ++
		n := rand.Intn(100) + 1
		fmt.Println("n = ",n)
		if n == 99{
   
			break
		}
	}
	fmt.Printf("一共耗费:%v次",count)

打印输出:

n =  97
n =  3
...
...
n =  99
一共耗费:22次

需要注意的细节:

  1. break 语句出现多层嵌套的语句块中时,可以通过标签 指明要终止的是哪一层语句块
	label2:
	for i:=0; i< 4; i++{
   
		// label1:
		for j := 0;j < 10; j++{
   
			if j ==2{
   
				// break 
				break label2 //  输出: j = 0 \n j = 1
			}
			fmt.Println("j=", j)
		}
	}
  • break 会默认跳出最近的 for 循环
  • break 后面可以指定标签,跳出标签对应的 for 循环。

continue

你可能感兴趣的:(go,go,后端,golang)