GO语言学习入门笔记系列详解(三):Go的流程控制介绍
条件语句判断
IF条件判断
- 读取文件的例子
func main() {
const filename = "abc.txt"
contents, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n", contents)
}
}
- 简化
//简化版本
if contents, err := ioutil.ReadFile(filename);err != nil{
fmt.Println(err)
}else {
fmt.Printf("%s\n", contents)
}
注意:
- if的条件里面可以赋值
- if的条件里赋值的变量作用域就在这个if语句里面
Switch选择
func eval(a, b int, op string) int {
var result int
switch op {
case "+" :
result=a+b
case "-" :
result=a-b
case "*" :
result = a*b
case "/":
result=a/b
default:
panic ( "unsupported operator:" + op)
}
return result
}
- switch会自动break,除非使用fallthrough
- switch后面可以没有表达式,在case里面加入条件就可以了
- 例子:成绩判断
func grade(score int) string {
g := ""
switch {
case score < 0 || score > 100:
panic(fmt.Sprintf("Wrong score : %d", score))
case score < 60:
g = "F"
case score < 80:
g = "C"
case score < 90:
g = "B"
case score <= 100:
g = "A"
}
return g
}
//打印数据
fmt.Println(
grade(0),
grade(58),
grade(86),
grade(90),
)
- 如果输入错误数据会中断执行
循环语句判断
普通循环语句
- for的条件里面不需要括号
- for的条件里面可以省略初始条件,结束条件,递增表达式
- 举例:把整数改成二进制表达式
//把正整数转换位二进制
func converToBin(n int) string {
result := ""
if n == 0 {
result = "0"
} else {
//省略初始条件相当于while
for ; n > 0; n /= 2 {
lsb := n % 2
//把位数往前加
result = strconv.Itoa(lsb) + result
}
}
return result
}
- 循环读取文件
//读取文件
func printFile(filename string) {
//返回值和出错的形式
file, err := os.Open(filename)
if err != nil {
panic(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
死循环
for{
fmt.Println("abc")
}
重点回顾:
- for,if后面的条件没有括号
- if条件里也可以定义变量
- 没有while
- switch不需要break,也可以直接switch多个条件
`
死循环
for{
fmt.Println("abc")
}
重点回顾:
- for,if后面的条件没有括号
- if条件里也可以定义变量
- 没有while
- switch不需要break,也可以直接switch多个条件