所以我目前正在使用gin-gonic软件包来构建一个 Restful api。我希望将代码部署到Google云平台计算引擎VM。当我在本地计算机上运行代码时,它可以与本地主机一起使用,但是在指定了外部IP的实际VM实例上运行它时,TCP连接会出现绑定(bind)错误。任何帮助表示赞赏。
server.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")
}
安慰:
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET /headlines/ign --> main.main.func1 (3 handlers)
[GIN-debug] GET /headlines/polygon --> main.main.func2 (3 handlers)
[GIN-debug] GET /headlines/techcrunch --> main.main.func3 (3 handlers)
[GIN-debug] Listening and serving HTTP on 35.237.89.107:8080
[GIN-debug] [ERROR] listen tcp 35.237.89.107:8080: bind: cannot assign requested address
最佳答案
您只能监听localhost,然后通过主机的ip来访问,例如35.237.89.107:8080
。
使用
r.Run(":8080")
0.0.0.0
是不必要的。关于rest - gin-gonic无法分配请求的地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53054670/