for循环
-
if条件里不需要括号
-
err != nil 判断是否为空
func main(){
const filename = "abc.txt"
contents , err := ioutil.ReadFile(filename); err != nil{
fmt.Println(err)
} else{
fmt.Printf("%s\n",contents)
}
}
- if的条件里可以进行赋值
- if的条件里赋值的变量作用域就在这个if语句里
if contents,err := ioutil.ReadFile(filename); err == nil{
fmt.Println(string(contents))
}else{
fmt.Println("cannit print file contents:",err)
}
switch
- switch会自动break,除非使用fallthrough
- switch 后可以没有表达式
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;
}
循环
- for的条件里不需要括号
- for的条件里可以省略初始条件,结束条件,递增表达式
- 没有while
func conbertToBin(n int) string{
result := ""
for ; n > 0; n /= 2{
lsb := n % 2
result = strconv.Itoa(lsb) + result
}
return result
}
func main(){
fmt.Println(
//101
convertToBin(5),
//1101
convertToBin(13),
convertToBin(5555547),
convertToBin(0),
)
}
func printFile (filename string){
file, err := os.Open(filename)
if err != nil{}
}
scanner := bufio.NewScanner(file)
for scanner.Scan(){
fmt.Println(scanner.Text())
}
}
- for可以什么条件也不加,此时的for循环为死循环
func forever(){
for{
fmt.Println("abc")
}
}
函数
- 函数可返回多个值
func div(a,b int)(int,int){
return a/b,a % b
}
- 函数返回多个值时可以起名字
- 仅用于非常简单的函数
- 对于调用者而言没有区别
func div(a,b int)(q,r int){
q = a / b
r = a % b
return
}
func apply(op func(int ,int) int,a,b int) int {
p := reflect.VlueOf(op).Pointer(p).Name()
fmt.Printf("Calling function %s with args " +
"(%d,%d)",opName,a,b)
return op(a,b)
}
- 可变参数列表
func sum(numbers ...int) int{
sum := 0
for i := range values{
sum += values[i]
}
return sum
}
#函数语法要点回顾
- 返回值类型写在最后面
- 可返回多个值
- 函数作为参数
- 没有默认参数,可选参数