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

时间:2018-10-29 22:14:35

标签: rest go google-cloud-platform google-compute-engine gin-gonic

因此,我目前正在使用gin-gonic软件包来构建一个静态的api。我希望将代码部署到Google云平台计算引擎VM。当我在本地计算机上运行代码时,它可以与本地主机一起使用,但是在指定了外部IP的实际VM实例上运行代码时,TCP连接会出现绑定错误。任何帮助表示赞赏。

server.go

github "ReactiveX/RxSwift"
github "RxSwiftCommunity/RxDataSources"
github "RxSwiftCommunity/Action"
github "RxSwiftCommunity/RxRealm"

github "realm/realm-cocoa"

github "Quick/Quick"
github "Quick/Nimble"

控制台:

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")
}

2 个答案:

答案 0 :(得分:3)

您需要使用0.0.0.0来代替.Run()语句上当前使用的内容。通过使用0.0.0.0,可以从可用的网络接口访问服务器。

r.Run("0.0.0.0:8080")

因此,从外部IP访问35.237.89.107:8080会指向您的应用。

答案 1 :(得分:1)

您只能监听localhost,然后才能通过主机的ip访问,例如35.237.89.107:8080

使用

r.Run(":8080")

0.0.0.0是不必要的。