微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从 Docker 中的用户输入发送 GET 请求?

我正在使用 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 请求)。

解决方法

在不同的 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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。