问题描述
我正在使用 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
}