【问题标题】:golang Infinite for loop problem with docker rungolang无限for循环问题与docker run
【发布时间】:2021-03-09 18:40:00
【问题描述】:

我尝试做简单的无限循环任务。不使用 docker 也能正常工作。但是当我使用 docker 时,它只会无限执行 for 循环的 else 部分。实际上可能是什么问题? docker 是否有无限 for 循环的问题? 我的 main.go 文件如下所示。

package main

 import (
"bufio"
"fmt"
"os"
 )

func main() {
 fmt.Println("Hello, World!.....")

 for {
    fmt.Print("-> ")
    var i int
    fmt.Scan(&i)
    if i == 1 {
        fmt.Println("Hello, World! 1")
    } else if i == 2 {

        fmt.Println("Hello, World! 2")
    } else if i == 3 {
        fmt.Println("Hello, World! 3")
    } else if i == 4 {
        fmt.Println("Hello, World! 4")
    } else if i == 5 {
        fmt.Println("Hello, World! 5")
    } else {
        fmt.Println("Hello, World! else")
        
    }

 }
}

我也尝试了这些链接。 Read line in golang How do I break out of an infinite loop in Golang 但还是没用。我从昨天开始就在努力解决这个问题。

docker文件如下:

FROM golang:1.12.0-alpine3.9

RUN mkdir /app

ADD . /app

WORKDIR /app

RUN go build -o main .

CMD ["go","run","/app/main.go"]

我尝试使用 docker build -t 你好。 并使用docker run hello运行

运行

码头运行你好

在没有 docker go run main.go 的情况下使用控制台执行

【问题讨论】:

    标签: docker go dockerfile


    【解决方案1】:

    无限循环是因为您的 go 程序正在等待输入,而您没有以交互模式启动容器。

    要使其工作,您需要使用此命令(注意-it 选项):

    docker container run --rm --name hello -it hello
    

    【讨论】:

      【解决方案2】:

      Scan 返回错误。很可能没有读取任何数据并且i0(因为这是intzero value)。

      在没有数据的情况下将代码更改为恐慌:

      var i int
      _, err := fmt.Scan(&i)
      if err != nil {
          panic(err)
      }
      

      Go playground 的行为方式类似。

      【讨论】:

      • 为什么使用 go run main.go 可以在本地控制台上正常进行扫描?
      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多