duanjiaolao1187 2015-05-14 14:51
浏览 59

Golang:具有范围条件的for循环重新启动

I'm trying to make this loop restart every time a name is already in the list, this code is obviously only going to check this once. Is there any way to make the loop restart from beginning? Thanks!

for _, client := range list.clients {
//for i := 0; i < len(list.clients); i++ {
    if(client.name==name){
        connection.Write([]byte("Name already exists please try another one:
"))
        bytesRead, _ := connection.Read(reply)
            name = string(reply[0:bytesRead])
        name = strings.TrimSuffix(name, "
")

    }
}
  • 写回答

1条回答 默认 最新

  • doujia2386 2015-05-14 15:03
    关注

    Wrap it in another for:

    Loop:
        for {
            for _, client := range list.clients {
                if client.name == name {
                    connection.Write([]byte("Name already exists please try another one:
    "))
                    bytesRead, _ := connection.Read(reply)
                    name = string(reply[0:bytesRead])
                    name = strings.TrimSuffix(name, "
    ")
                    continue Loop // Start over
                }
            }
            break // Got through it; we're done
        }
    

    You can also just reset your index. range may be the wrong tool here:

    for i := 0; i < len(list.clients); i++ {
        client := list.clients[i]
        if client.name == name {
            connection.Write([]byte("Name already exists please try another one:
    "))
            bytesRead, _ := connection.Read(reply)
            name = string(reply[0:bytesRead])
            name = strings.TrimSuffix(name, "
    ")
            i = -1 // Start again
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程