从Docker内的用户输入发送GET请求?
我正在使用Golang并尝试从CLI获取用户输入,并将其作为GET请求发送到localhost:8080,但我不知道如何执行。我目前拥有以下内容,并且正在使用Docker容器:从Docker内的用户输入发送GET请求?,docker,http,go,get,request,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(&quo
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容器:
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 run-it-P8080:8081 go应用程序
我想在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
}
log.Fatal(http.ListenAndServe(“:8081”,nil))
——这一行是应用程序中可以执行的最后一行。它之后的任何行都不能保证执行。我知道,我正在试图找到一种方法,使它能够运行并接受来自CLI的输入。我曾考虑过多线程,在一个线程上有用户输入,在另一个线程上有HTTP服务器,但我不确定;无法保证在调用http.Get时服务器已准备好接受连接。使用而不是ListendServe并在主goroutine.Thx@Peter中创建侦听器。根据您的建议更新。