美文网首页
go语言学习(3)--分支和循环

go语言学习(3)--分支和循环

作者: 神奇大叶子 | 来源:发表于2018-08-02 00:16 被阅读16次

    if

    先看一个最常见的 if else分支

    func readFile() {
        const filename = "./lesson2(branch)/abc.txt"
        contents, err := ioutil.ReadFile(filename)
        if err != nil {
            fmt.Println(err)
        } else {
            fmt.Printf("%s\n", contents)
        }
    }
    

    发现什么了吗, go里的if后面不用加括号,直接写语句就行,等下学的 for 循环也是不用加括号,因为go是个崇尚简洁的语言,下面再来看这个例子还能这么写

    func readFile() {
        const filename = "./lesson2(branch)/abc.txt"
        if contents, err := ioutil.ReadFile(filename); err != nil {
            fmt.Println(err)
        } else {
            fmt.Printf("%s\n", contents)
        }
    }
    

    可以把读操作和判断 error 写在同一行,if else没啥讲的,其他语言你会用,这也一样

    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 <= 1000:
            g = "A"
        default:
            panic(fmt.Sprintf("Wrong score: %s", score))
        }
        return g
    }
    

    与 java 些许不同的是,这些 case 里面不用写 break, 编译器会自动帮你退出,很贴心有木有,panic是个关键字,抛出异常,相当于new throw.分支就讲到这,下面讲循环

    for

    直接看代码

    /**
    传统循环
    */
    func sum(n int) int {
        sum := 0
        for i := 0; i <= n; i++ {
            sum += i
        }
        return sum
    }
    

    gofor不光省略了括号,还可以省略初始条件,终止条件

    /**
    省略初始条件
    */
    func convertToBin(n int) string {
        result := ""
        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())
        }
    }
    
    /**
    死循环
    */
    func forever() {
        for {
            fmt.Println("我是死循环")
            time.Sleep(1 * time.Second)
        }
    }
    

    go里死循环就是 for 后面什么都不加,就是 while(true)的意思

    总结

    • for,if后面的条件没有括号
    • if条件里也可以定义变量
    • 没有while
    • switch不需要break,也可以直接switch多个条件,条件写case

    上述代码均已上传至 github, 欢迎 star
    https://github.com/yejunyu/golearn


    image

    相关文章

      网友评论

          本文标题:go语言学习(3)--分支和循环

          本文链接:https://www.haomeiwen.com/subject/igbdvftx.html