goji / httpauth - 不能与标准的Golang'net / http'库一起使用

时间:2017-10-28 14:02:19

标签: go goji

代码

package main

import (
        "fmt"
        "log"
        "net/http"
        "github.com/goji/httpauth"
)


func rootHandler(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "text/plain")
        w.WriteHeader(http.StatusOK)

        data := "TEST"

        w.Header().Set("Content-Length", fmt.Sprint(len(data)))
        fmt.Fprint(w, string(data))
}

func main() {
        r:=http.HandlerFunc(rootHandler)
        http.HandleFunc("/", httpauth.SimpleBasicAuth("dave", "somepassword")(r))
        log.Fatal(http.ListenAndServe(":8080", nil))
}

返回

:!go build test.go
# command-line-arguments
./test.go:23:71: cannot use httpauth.SimpleBasicAuth("dave", "somepassword")(r) (type http.Handler) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc

我做错了什么?我是Go的新手,不明白为什么示例here不完整且不包含YourHandler函数。

1 个答案:

答案 0 :(得分:0)

在我的头撞到众所周知的墙壁之后,我想出来了。

使用http.Handle,而不是http.HandleFunc! :)

使用main函数

func main() {
        r:=http.HandlerFunc(rootHandler)
        http.Handle("/", httpauth.SimpleBasicAuth("dave", "somepassword")(r))
        log.Fatal(http.ListenAndServe(":8080", nil))
}

您有一个完整的httpauth工作示例,其中包含net / http!

This answer对内部运作也有很好的概述。