Go无法同时添加accept和content-type标头

时间:2015-11-16 08:13:31

标签: go

我正在尝试为go中的简单休息应用程序编写测试。所以我写了这样的话:

func TestMyTestFunc(t *testing.T) {
    var w = httptest.NewRecorder()
    req, err := http.NewRequest("POST", "/", nil)
    if err != nil {
        t.Errorf("Error creating request: %s", err.Error())
    }
    // req.Header.Add("Content-Type", "application/json")
    // req.Header.Add("Accept", "application/json")
    l.ServeHTTP(w, req)  // l is defined somewhere above
    // check for w.Code, w.Body
}

这完全没问题。现在我想添加标题。所以我添加了注释标题部分,最后得到:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference

错误就在这一行:l.ServeHTTP(w, req)

有趣的是,如果我只设置Content-TypeAccept,测试会运行,但如果我同时设置,则会失败。怎么了?

P.S。我也尝试使用req.Header.Set,但没有区别。 这是我的处理程序的存根:

func (l myHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
    // check for validity
    if !valid {
       http.Error(w, "Invalid Accept", http.StatusBadRequest)
       return
    }
    w.WriteHeader(http.StatusNoContent)
    return
}

1 个答案:

答案 0 :(得分:1)

我认为你的http服务器/处理程序实现中的错误。我试图重现它并且它有效。

你可以在这里看到: http://play.golang.org/p/n1YBl3OpbN