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中使用全局变量所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)