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