GO 从零开始的语法学习<二>

143 阅读1分钟

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
}

#函数语法要点回顾

  • 返回值类型写在最后面
  • 可返回多个值
  • 函数作为参数
  • 没有默认参数,可选参数