Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Docker内的用户输入发送GET请求?_Docker_Http_Go_Get_Request - Fatal编程技术网

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

从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

我正在使用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容器:

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中创建侦听器。根据您的建议更新。