在Echo golang中使用http标头时,分配给nil映射中的条目

Che*_*o47 1 http go go-echo

这是我使用测试包和echo web http framework进行的测试:(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)
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试测试REST GET方法调用的某些功能,但出现此紧急错误:

panic: assignment to entry in nil map [recovered]
        panic: assignment to entry in nil map
Run Code Online (Sandbox Code Playgroud)

当我试图设置标题时,恐慌就以粗体显示(代码中的星号)。我究竟做错了什么?

Tim*_*per 5

错误是不言自明的:req.Headernil; 您不能分配给零贴图。

解决方案是:

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

    req.Header = make(http.Header)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,使用创建req变量net/http.NewRequest,该变量将为您进行所有内部初始化:

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