gpt4 book ai didi

go - 创建处理程序如何工作?

转载 作者:IT王子 更新时间:2023-10-29 02:31:04 26 4
gpt4 key购买 nike

我正在看这个例子

var name string

type helloWorldResponse struct {
Message string `json:"message"`
}

type helloWorldRequest struct {
Name string `json:"name"`
}

func main() {
port := 8080

handler := newValidationHandler(newHelloWorldHandler())
http.Handle("/helloworld", handler)
log.Printf("Server starting on port %v\n", port)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%v", port), nil))
}

type validationHandler struct {
next http.Handler
}

func newValidationHandler(next http.Handler) http.Handler {
return validationHandler{next: next}
}

func (h validationHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
var request helloWorldRequest
decoder := json.NewDecoder(r.Body)

err := decoder.Decode(&request)
if err != nil {
http.Error(rw, "Bad request", http.StatusBadRequest)
return
}

name = request.Name
h.next.ServeHTTP(rw, r)
}

type helloWorldHandler struct{}

func newHelloWorldHandler() http.Handler {
return helloWorldHandler{}
}

func (h helloWorldHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
response := helloWorldResponse{Message: "Hello " + name}

encoder := json.NewEncoder(rw)
encoder.Encode(response)
}

代码的作者解释说我们是将把处理程序链接在一起,第一个处理程序,这是我们的验证处理程序,需要引用链中的下一个,因为它有责任调用ServeHTTP 或返回响应。我是 Go 的新手,我不明白这一行

return validationHandler{next: next}

next:next代表什么数据结构?

最佳答案

type validationHandler struct {
next http.Handler // 1
}

func newValidationHandler(next /* 2 */ http.Handler) http.Handler {
return validationHandler{next: next}
// 1 2
}

next 数字 1 是来自 validationHandler 结构的字段(上面几行)。另一个 next 是方法的参数(来自签名)。总而言之,这只是在结构中设置一个字段。没有魔法。

Which data structure next:next represents?

不是数据结构。它是结构初始化语法。在此处查看更多示例:https://gobyexample.com/structs

关于go - 创建处理程序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com