加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

rest – 在golang中使用全局变量

发布时间:2020-12-16 09:22:30 所属栏目:大数据 来源:网络整理
导读:我有一个全局变量,我试图在两个不同的函数中使用,并且无法弄清楚为什么以下代码不起作用… package mainimport ( "github.com/ant0ine/go-json-rest/rest" "log" "net" "net/http")type Message struct { Body string}var api rest.Apifunc hostLookup(w res
我有一个全局变量,我试图在两个不同的函数中使用,并且无法弄清楚为什么以下代码不起作用…

package main

import (
    "github.com/ant0ine/go-json-rest/rest"
    "log"
    "net"
    "net/http"
)

type Message struct {
    Body string
}

var api rest.Api

func 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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读