if contents, err := ioutil.ReadFile(filename); err !=nil{
fmt.Println(err)}else{
fmt.Printf("%s\n", contents)}
1.2 switch
switch会自动break,除非使用fallthrough
switch后可以没有表达式
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"}
2. 循环
2.1 for
for的条件里不需要括号
for的条件里可以省略初始条件,结束条件、递增表达式
//省略初始条件,相当于whilefor; n >0; n /=2{
lsb := n %2
result = strconv.Itoa(lsb)+ result
}//省略初始条件与递增条件,相当于whilefor scanner.Scan(){
fmt.Println(scanner.Text())}//无限循环for{
fmt.Println("abc")}
3. 函数
函数可以返回多个值
funcdiv(a, b int)(intint){return a / b, a % b
}
函数返回多个值时可以起名字
仅用于非常简单的函数
对调用者没有区别
funcdiv(a, b int)(q, r int){
q = a / b
r = a % b
return}
函数作参数
funcapply(op func(int,int)int, a, b int)int{
p := reflect.ValueOf(op).Pointer()
opName := runtime.FuncForPC(p).Name()
fmt.Printf("Calling function %s with args "+"(%d, %d)\n", opName, a, b)returnop(a, b)}
可变参数列表
funcsum(numbers ...int)int{
s :=0for i :=range numbers {
s += numbers[i]}return s
}