一.条件语句
if 语句
- if的条件里是不需要括号的
package main
import (
"fmt"
"io/ioutil"
)func main() {
const filename = "abc.txt" //文件"abc.txt"要放在工程的根目录下
contents, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s\n", contents)
}
}
- go中的if后可以跟多条语句,语句之间用分号隔开
- if 的条件里可以赋值,if条件里赋值的变量的作用域就在这个if语句块中
if contents, err := ioutil.ReadFile(filename); err != nil {
fmt.Println(err)
}else {
fmt.Printf("%s\n", contents)
}fmt.Printf("%s\n", contents) //这里会报错 因为 contents 不存在
注意:这里的contents的作用域与上面的contents不同,上面的contents除了if语句块后还存在,而这里的contents在出了if语句块后就不存在了,因为这里的contents是定义在if语句块中的
switch 语句
- go中的switch语句每个case自带break,不需要额外去写,除非使用fallthrough
- "swicth"后面可以没有表达式,而把条件加到case后面
func switchtest(a int) int{
n, m := 2,3
switch a {
case 0 : // 表示a=0
return n+m
case 1 :
return m-n
default :
return -1
}
}
func switchtest(a int) int{
n, m := 2,3
switch {
case a>10:
return n+m
case a<=10:
return m-n
default :
return -1
}
}
二.循环语句
- for的条件里不需要括号
- for的条件里可以省略初始条件,结束条件,递增表达式
//实现将十进制数转为二进制
func intToBin(n int) string {
result := ""
for ; n >0 ; n /= 2 { //这里的for省略了初始条件
lsb := n%2
result = strconv.Itoa(lsb) + result //倒着放每次对2取余后的数
}
return result
}注:func FormatInt(i int64, base int) string
返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母'a'到'z'表示大于10的数字。
Itoa是FormatInt(i, 10) 的简写 即把十进制数转换为string
//另一种读取文件内容的方式
func readFile(filename string) {
file, err := os.Open(filename)
if err != nil {
log.Panic(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() { //这里的for 同时省去了起始条件和自增条件,只有一个结束判断条件,连分号都省略了
fmt.Println(scanner.Text())
}
}注: func NewScanner
func NewScanner(r io.Reader) *ScannerNewScanner创建并返回一个从r读取数据的Scanner,默认的分割函数是ScanLines。
- go语言中没有"while"循环语句,可以直接用for什么条件都不加来写一个死循环
for {
//代码块
}