从 Docker 中的用户输入发送 GET 请求?

时间:2021-04-29 08:41:01

标签: docker http go get request

我正在使用 Golang 并尝试从 CLI 获取用户输入并将其作为 GET 请求发送到 localhost:8080,但我不知道该怎么做。我目前有以下内容并且正在使用 Docker 容器:

func main() {
    fmt.Println("Enter desired input: ")

    // Get user input
    var input string
    fmt.Scanln(&input)

    http.HandleFunc("/", doSomething)
    log.Fatal(http.ListenAndServe(":8081", nil))

    resp, err := http.Get("http://localhost:8080/?input=" + input)
    // Print response out here
}

func doSomething(w http.ResponseWriter, r *http.Request) {
    query := r.URL.Query().Get("input")
    // Send response
}

Docker 文件:

FROM golang:1.12.0-alpine3.9
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]

然后我启动 Docker 容器:

docker run -it -p 8080:8081 go-app

我想在 CLI 中输入数字,然后从 HTTP 服务器返回响应。我该怎么做,因为上述解决方案不起作用(因为它没有在 main() 方法中发出 GET 请求)。

1 个答案:

答案 0 :(得分:1)

在不同的 goroutine 中运行 http 服务器

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    fmt.Println("Enter desired input: ")

    // Get user input
    var input string
    fmt.Scanln(&input)

    l, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal(err)
    }

    go func() {
        http.HandleFunc("/", doSomething)
        log.Fatal(http.Serve(l, nil))
    }()

    resp, err := http.Get("http://localhost:8080/?input=" + input)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Resp: %v\n", resp)
    // Print response out here
}

func doSomething(w http.ResponseWriter, r *http.Request) {
    query := r.URL.Query().Get("input")
    fmt.Println(query)
    // Send response
}