douqi5079 2017-08-12 08:00
浏览 891
已采纳

Golang中的无限for循环[重复]

This question already has an answer here:

I'm new to Golang, but I would expect not to have issues with something as basic as this.

package main

import "fmt"

func main() {
    s := make([]int, 0)
    s = append(s, 1)
    for len(s) != 0 {
        j := len(s) - 1
        top, s := s[j], s[:j]
        fmt.Printf("top = %+v
", top)
        fmt.Printf("s = %+v
", s)
        fmt.Printf("len(s) = %+v
", len(s))
    }
}

This command doesn't exit, it just prints

len(s) = 0
top = 1
s = []
len(s) = 0
top = 1
s = []
len(s) = ^C

I find this stunning; what am I doing wrong? Syntactically, based on https://tour.golang.org/flowcontrol/3, everything seems OK.

</div>
  • 写回答

1条回答 默认 最新

  • drouie2014 2017-08-12 08:03
    关注

    When you use :=, you declare new variables. An s is created inside the loop unrelated to the s outside it. Assign instead:

    for len(s) != 0 {
        j := len(s) - 1
        var top int
        top, s = s[j], s[:j]
        fmt.Printf("top = %+v
    ", top)
        fmt.Printf("s = %+v
    ", s)
        fmt.Printf("len(s) = %+v
    ", len(s))
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。