Go流程控制
Posted yzg-14
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go流程控制相关的知识,希望对你有一定的参考价值。
1. 顺序控制
程序从上往下执行,中间没有任何的判断和跳转。
2. 分支控制
2.1if单分支
if age > 18 { fmt.Println("你年龄大于18,要对自己的行为负责!") } // golang支持在if中,直接定义一个变量,比如下面 if age := 20; age > 18 { fmt.Println("你年龄大于18,要对自己的行为负责!") }
2.2 if双分支
if age > 18 { fmt.Println("==") } else { // else不能写在下一行 fmt.Println("====") }
2.3 if多分支
2.4 switch
注意
package main import ( "fmt" ) // 写一个非常简单的函数 func test(char byte) byte { return char + 1 } func main() { fmt.Println("请输入一个字符 a,b,c,d,e,f,g") fmt.Scanf("%c", &key) switch test(key) + 1 { // 将语法现象 case ‘a‘: fmt.Println("周一, 猴子穿新衣") case ‘b‘: fmt.Println("周二,猴子当小二") case ‘c‘: fmt.Println("周三,猴子爬雪山") //... default: fmt.Println("输入有误...") } var n1 int32 = 51 var n2 int32 = 20 switch n1 { case n2, 10, 5: // case 后面可以有多个表达式 fmt.Println("ok1") case 90: fmt.Println("ok2~") } // switch 后也可以不带表达式,类似 if --else分支来使用 var age int = 10 switch { case age == 10: fmt.Println("age == 10") case age == 20: fmt.Println("age == 20") default: fmt.Println("没有匹配到") } //case 中也可以对 范围进行判断 var score int = 90 switch { case score > 90: fmt.Println("成绩优秀..") case score >= 70 && score <= 90: fmt.Println("成绩优良...") case score >= 60 && score < 70: fmt.Println("成绩及格...") default: fmt.Println("不及格") } // switch 后也可以直接声明/定义一个变量,分号结束,不推荐 switch grade := 90; { // 在golang中,可以这样写 case grade > 90: fmt.Println("成绩优秀~..") case grade >= 70 && grade <= 90: fmt.Println("成绩优良~...") case grade >= 60 && grade < 70: fmt.Println("成绩及格~...") default: fmt.Println("不及格~") } // switch 的穿透 fallthrought var num int = 10 switch num { case 10: fmt.Println("ok1") fallthrough // 默认只能穿透一层 // 立马输出ok2,不用判断 case 20: fmt.Println("ok2") fallthrough case 30: fmt.Println("ok3") default: fmt.Println("没有匹配到..") } }
3. 循环控制
3.1 for循环
package main import ( "fmt" ) func main() { for i := 1; i <= 10; i++ { fmt.Println("你好,尚硅谷", i) } // for循环的第二种写法 j := 1 //循环变量初始化 for j <= 10 { //循环条件 fmt.Println("你好,尚硅谷~", j) j++ //循环变量迭代 } // for循环的第三种写法, 这种写法通常会配合break使用 k := 1 for { // 这里也等价 for ; ; { if k <= 10 { fmt.Println("ok~~", k) } else { break //break就是跳出这个for循环 } k++ } // 字符串遍历方式1-传统方式 var str string = "hello,world!北京" for i := 0; i < len(str); i++ { fmt.Printf("%c ", str[i]) // 使用到下标... } // 字符串遍历方式1-传统方式 var str string = "hello,world!北京" str2 := []rune(str) // 就是把 str 转成 []rune for i := 0; i < len(str2); i++ { fmt.Printf("%c ", str2[i]) // 使用到下标... } fmt.Println() // 字符串遍历方式2-for-range str = "abc~ok上海" for index, val := range str { fmt.Printf("index=%d, val=%c ", index, val) } }
3.2 for循环实现while循环
package main import "fmt" func main(){ // 使用while方式输出10句hello,world // 循环变量初始化 var i int = 1 for { if i > 10 { // 循环条件 break // 跳出for循环,结束for循环 } fmt.Println("hello,world", i) i++ // 循环变量的迭代 } fmt.Println("i=", i) // 使用的do...while实现完成输出10句hello,ok var j int = 1 for { fmt.Println("hello,ok", j) j++ // 循环变量的迭代 if j > 10 { break // break 就是跳出for循环 } } }
3.3 for循环打印金字塔
package main import "fmt" func main() { var totalLevel int = 10 for i := 1; i <= totalLevel; i++ { // 在打印*前先打印空格 for k := 1; k <= totalLevel - i; k++ { fmt.Print(" ") } // j 表示每层打印多少* // 第一层1个* 第二层3个* 第三层5个* 第四层7个* // j在等于1的时候或者1*i-1或者totalLevel的时候打印*,否则打印空格 for j :=1; j <= 2 * i - 1; j++ { if j == 1 || j == 2 * i - 1 || i == totalLevel { fmt.Print("*") // 不会换行 } else { fmt.Print(" ") } } fmt.Println() // 换行 } }
3.4 for打印99乘法表
package main import "fmt" func main() { // 1*1=1 // 2*1=2 2*2=4 // 3*1=3 3*2=6 3*3=9 // i 表示第几层, j表示从1到i for i := 1; i < 10; i++{ for j := 1; j <= i; j++{ fmt.Printf( "%v*%v=%v ", i, j, i*j) // 注意这里是Printf } fmt.Println() } }
以上是关于Go流程控制的主要内容,如果未能解决你的问题,请参考以下文章