MENU

Go 学习笔记:循环

August 21, 2021 • Golang

和Python 或 C语言不同,Go没有while 循环,它使用了for循环来替代while循环(不过仔细想想,写了这么久代码,while循环也确实不咋用)

C语言中的for循环转换成go里的就是这样

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 21:48:52
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println("Hello world")
    }
}

当然,for也能替代while

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 21:48:52
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    num := 5
    for num != 0 {
        fmt.Println("Hello world")
        num--
    }
}

当然也可以写成死循环

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 21:51:26
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    for {
        fmt.Println("Hello world")
    }
}

你也可以用range来对可迭代对象循环

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 21:53:03
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    strs := [...]string{"Hello", "world", "my", "dear"}
    for idx, item := range strs {
        fmt.Println(idx, item)
    }
}

当然for也是可以嵌套的

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 21:57:16
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var num = 10
    for i := 1; i <= num; i++ {
        for j := 1; j <= num; j++ {
            fmt.Printf("%-4d", i+j-1)
        }
        fmt.Println()
    }
}

既然谈到循环了,当然不缺 break continuegoto

break

可用于跳出循环

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 22:03:23
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var num = 10
    var end = 0
    for i := 1; i <= num; i++ {
        if i >= 5 {
            fmt.Println(i)
            end = i
            break
        }
    }
    fmt.Println(end) // end = 5
}

也可以跳出switch语句

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 22:04:07
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var grade string = "A"
    switch grade {
    case "A":
        fmt.Println("优秀")
        break
        fmt.Println("优秀1") // 这段就不会执行了
    case "B":
        fmt.Println("良好")
    case "C":
        fmt.Println("中等")
    default:
        fmt.Println("不及格")
    }
}

也可以使用标号跳出多重循环

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 22:06:57
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var num = 10
re:
    for i := 1; i <= num; i++ {
        for j := 1; j <= num; j++ {
            if i > num/2 {
                break re
            }
            fmt.Printf("%-4d", i+j-1)
        }
        fmt.Println()
    }
}

continue

可用于跳过本次循环

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-08-21 22:18:44
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "fmt"
)

func main() {
    var num = 10
    var end = 0
    for i := 1; i <= num; i++ {
        if i >= 5 {
            fmt.Println(i)
            end = i
            continue
        }
    }
    fmt.Println(end) // end = 10
}

同样的,continue也支持使用标签,但是这里就不演示了,具体可以参考:Go 语言 continue 语句 | 菜鸟教程 (runoob.com)

goto

又是这个鸡肋的功能... 这个可以配合标签实现无条件的跳转,但是常常会造成程序流程的混乱,使程序的理解和调试都产生困难,因此本文不做讲解,具体可以参考

Go 语言 goto 语句 | 菜鸟教程 (runoob.com)

作者:NorthCity1984
出处:https://grimoire.cn/golang/go5.html
版权:本文《Go 学习笔记:循环》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任