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 赋初值;判别赋值表达式 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
name是一个字符串字符串是字符串的数组在做字符串遍历的时候尽量使用range
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)