上一篇内容: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
什么都不奖励
default 语句不是必须的。
switch 后面可以不带表达式,类似 if-else
分支来使用。
switch 和 if 的比较:
for
循环。Golang 里面的 for 循环和和传统的没太大的语法差别。而循环条件是返回一个布尔表达式。
package main
import (
"fmt"
)
func main() {
for i:=1; i < 10; i++ {
fmt.Println("hello world")
}
}
这里最终运行完成之后, i 的值为 11
;
给省略了。// for 循环的第二种写法
j := 1 // 循环变量初始化
for j < 10{
// 循环条件
fmt.Println("hello world~~~")
j++ // 循环变量迭代
}
这个书写形式也就是 Golang 当中 while 语句的书写形式,因此 Go 里面没有 while 或者 do while的书写形式。被整合进了 for 语句当中。
// for 循环的第三种写法,这种写法通常会配合 break 使用
k:=1
for {
if k <= 10{
fmt.Println("ok~")
}else{
break
}
k++
}
for - range
表达式假设我们现在要遍历一个字符串,传统上我们会如下进行遍历:
var s string = "qwer!"
for i := 0; i < len(s); i++ {
fmt.Printf("%c\n", s[i])
}
而通过 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)
}
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 用于终止 某个语句块,用于中断当前 for 循环或跳出 switch 语句:
......
break
......
}
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次
需要注意的细节:
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)
}
}
for
循环