【问题标题】:Assignment to entry in nil map when using http header with Echo golang使用带有 Echo golang 的 http 标头时分配 nil 映射中的条目
【发布时间】:2018-03-14 19:31:47
【问题描述】:

这是我使用测试包和 echo web http 框架的测试: (webserver 变量是一个全局的 echo 实例)

func TestRunFunction(t *testing.T){
    req := new(http.Request)
    **req.Header.Set("Authorization","Bearer "+loginToken.Token)**
    rec := httptest.NewRecorder()
    c := WebServer.NewContext(standard.NewRequest(req, WebServer.Logger()), standard.NewResponse(rec, WebServer.Logger()))
    c.SetPath(path)
    if assert.NoError(t , RunFunction(c)){
        assert.Equal(t,http.StatusOK, rec.Code)
    }
}

我正在尝试测试一些由 REST GET 方法调用的函数,但我得到了这个恐慌错误:

panic: assignment to entry in nil map [recovered]
        panic: assignment to entry in nil map

当我尝试设置标题时,恐慌以粗体显示(代码中的 astrix)。我做错了什么?

【问题讨论】:

    标签: http go go-echo


    【解决方案1】:

    错误是不言自明的:req.Header 为零;您不能分配给 nil 地图。

    解决办法是:

    1. 使用net/http.Header 的新实例初始化req.Header

      req.Header = make(http.Header)
      
    2. 或者,使用net/http.NewRequest 创建req 变量,它会为您完成所有内部初始化:

      req, err := http.NewRequest("GET", "https://example.com/path", nil)
      if err != nil {
          panic(err)
      }
      req.Header.Set("Authorization","Bearer "+loginToken.Token)
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 2013-02-13
      • 2020-09-28
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多