我有一个外循环和内循环,每个循环都在一个范围内迭代.当内部循环满足条件时,我想退出外部循环.

我有一个解决方案,它使用两个"Break",一个在内循环内,另一个在外循环内,就在内循环之外(这是一个非常简单的演示用例):

package main

import (
    "fmt"
)

func main() {

    word := ""
    for _, i := range("ABCDE") {
        for _,j := range("ABCDE") {
            word = string(i) + string(j)
            fmt.Println(word)
            if word == "DC" {
                break
            }
        }
        if word == "DC" {
            break
        }
    }
    // More logic here that needs to be executed
}

Go Playground

这个解决方案没有问题,但在我看来,它只是打了补丁,很难看.有更好的方法吗?

在前面的解决方案中,我可以try 在外部循环之外使用另一个for条件循环,并创建一个标签,然后对该标签使用Continue.但是正如您所看到的,这种方法并不比Break的解决方案更优雅.

package main

import (
    "fmt"
)

func main() {

    word := ""

Exit:
    for word != "DC" {
        for _, i := range "ABCDE" {
            for _, j := range "ABCDE" {
                word = string(i) + string(j)
                fmt.Println(word)
                if word == "DC" {
                    continue Exit
                }
            }
        }
    }
    // More logic here that needs to be executed
}

Go Playground

我在这里看到了与其他语言(C、C、Python等)相关的类似问题.但我真正感兴趣的是,Go构造是否有任何技巧,比如"for select".

推荐答案

使用函数

package main

import (
    "fmt"
)

func getWord() string {
    word := ""
    for word != "DC" {
        for _, i := range "ABCDE" {
            for _, j := range "ABCDE" {
                word = string(i) + string(j)
                fmt.Println(word)
                if word == "DC" {
                    return word
                }
            }
        }
    }
    return word
}

func main(){
    word := getWord()
}

编辑:感谢@peterSO,他指出了细节中的一些错误,并提供了这篇文章

Go相关问答推荐

使用恶意软件 scanner (ClamAV)时的Google云存储桶上传文件验证

获取k8s群集作用域运算符的命名空间

使用一元或服务器流将切片从GRPC服务器返回到客户端

在nixos上找不到XInput2.h头文件的包

JWT 如何解析声明有效性和错误?

如何使用 Go 连接到非默认 firestore 数据库?

调用库和直接操作效率有区别吗?

这种合并排序的实现有什么问题?

Go Build删除信息

杜松子wine 和中间件

从单词中删除特殊字符

我的神经网络(从头开始)训练,让它离目标更远

当填充通道的函数调用未嵌入 goroutine 时,为什么我会遇到死锁?

如何从 Go 中的 `HijackedResponse` 中删除 Cursor Position ANSI 转义码?

Apache Beam 左加入 Go

如何在 Golang http.Request 对象中读取自定义 ajaxParams

如何在切片增长时自动将切片的新元素添加到函数参数

同时调用应该只获取一次数据

如何使用golang操作很长的字符串以避免内存不足

从 map 返回空数组而不是空字符串数组