猿问

gin-gonic 无法分配请求的地址

所以我目前正在使用 gin-gonic 包在 go 中构建一个 restful api。我希望将代码部署到谷歌云平台计算引擎 VM。当我在我的本地机器上运行代码时,它使用本地主机工作,但是当在指定外部 IP 的实际 VM 实例上运行它时,我收到 TCP 连接的绑定错误。任何帮助表示赞赏。


服务器.go


package main


import (

    "encoding/json"

    "io/ioutil"

    "net/http"

    "os"


    "github.com/gin-gonic/gin"

)


type headlines struct {

    Author      string

    Title       string

    Description string

    Url         string

    UrlToImage  string

    PublishedAt string

    Content     string

}


type NewsResponse struct {

    Status       string

    TotalResults int

    Articles     []headlines

}


func GetSourceHeadlines(source string) NewsResponse {

    newsAPIKey := os.Getenv("NEWS_API_KEY")

    var newsResponse NewsResponse

    resp, err := http.Get("https://newsapi.org/v2/top-headlines?sources=" + source + "&apiKey=" + newsAPIKey)


    if err != nil {

        panic(err)

    }


    defer resp.Body.Close()


    if resp.StatusCode == http.StatusOK {

        bodyBytes, _ := ioutil.ReadAll(resp.Body)

        err := json.Unmarshal(bodyBytes, &newsResponse)

        if err == nil {

            return newsResponse

        }

    }

    return newsResponse

}


func main() {

    r := gin.Default()

    r.GET("/headlines/ign", func(c *gin.Context) {

        c.JSON(http.StatusOK, GetSourceHeadlines("ign"))

    })


    r.GET("/headlines/polygon", func(c *gin.Context) {

        c.JSON(http.StatusOK, GetSourceHeadlines("polygon"))

    })


    r.GET("/headlines/techcrunch", func(c *gin.Context) {

        c.JSON(http.StatusOK, GetSourceHeadlines("techcrunch"))

    })


    r.GET("/headlines/hacker-news", func(c *gin.Context) {

        c.JSON(http.StatusOK, GetSourceHeadlines("hacker-news"))

    })

    r.Run("35.237.89.107:8080")

}



慕田峪7331174
浏览 102回答 2
2回答

GCT1015

你只能听本地主机,然后通过你主机的 ip 访问,比如35.237.89.107:8080.使用r.Run(":8080")0.0.0.0没有必要。

慕姐8265434

您需要使用0.0.0.0而不是您当前使用的 on.Run()语句。通过使用0.0.0.0,可以从可用的网络接口访问服务器。r.Run("0.0.0.0:8080")因此从外部 IP 访问35.237.89.107:8080将指向您的应用程序。
随时随地看视频慕课网APP

相关分类

Go
我要回答