因此,我目前正在使用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")
}
答案 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
是不必要的。