如何解决从 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 举报,一经查实,本站将立刻删除。