rest – 在golang中使用全局变量

rest – 在golang中使用全局变量,第1张

概述我有一个全局变量,我试图在两个不同的函数中使用,并且无法弄清楚为什么以下代码不起作用… package mainimport ( "github.com/ant0ine/go-json-rest/rest" "log" "net" "net/http")type Message struct { Body string}var api res 我有一个全局变量,我试图在两个不同的函数中使用,并且无法弄清楚为什么以下代码不起作用…

package mainimport (    "github.com/ant0ine/go-Json-rest/rest"    "log"    "net"    "net/http")type Message struct {    Body string}var API rest.APIfunc hostLookup(w rest.ResponseWriter,req *rest.Request) {    ip,err := net.LookupIP(req.PathParam("host"))    if err != nil {        rest.Error(w,err.Error(),http.StatusInternalServerError)        return    }    w.WriteJson(&ip)}func foo() {    API := rest.NewAPI()    API.Use(rest.DefaultDevstack...)    router,err := rest.MakeRouter(        &rest.Route{"GET","/lookup/#host",hostLookup},)    if err != nil {        log.Fatal(err)    }    API.SetApp(router)}func bar() {    log.Fatal(http.ListenAndServe(":8080",API.MakeHandler()))}func main() {    foo()    bar()}

上面的代码不起作用…… http服务器不会将请求路由到hostLookup函数.

但是 – 如果我从bar()移动以下行

log.Fatal(http.ListenAndServe(":8080",API.MakeHandler()))

到函数foo()的末尾,然后它正常工作

我究竟做错了什么?

解决方法 你的问题有两个……

首先,你宣布

var API rest.API

但是rest.New()返回一个* rest.API

func NewAPI() *API {

其次,在你的foo()函数中,你创建了一个名为API的局部变量,而不是使用你的包变量.

代替

API := rest.NewAPI()

它应该是

API = rest.NewAPI()

因此,修复是在rest.API之前添加一个*,如var API * rest.API并从API的设置中删除一个冒号,如API = rest.NewAPI()

总结

以上是内存溢出为你收集整理的rest – 在golang中使用全局变量全部内容,希望文章能够帮你解决rest – 在golang中使用全局变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1265609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存