【问题标题】:Passing arguments to mux handler function in golang在golang中将参数传递给mux处理函数
【发布时间】:2020-12-17 21:45:05
【问题描述】:

我正在尝试使用多路复用器并设置一些处理程序。我有以下处理程序

func homePage(w http.ResponseWriter, r *http.Request) {
    // Some code
}

func main() {
    router := mux.NewRouter().StrictSlash(true)

    router.HandleFunc("/", homePage)
    log.Fatal(http.ListenAndServe(":8090", router))
}

有什么方法可以将更多参数传递给处理函数,以便我可以做更多的逻辑?我的意思是为homePage 函数添加一个参数,称为message。像这样的...

func homePage(w http.ResponseWriter, r *http.Request, message string) {
    // Do some logic with message

    // Rest of code
}

func main() {
    router := mux.NewRouter().StrictSlash(true)

    router.HandleFunc("/", homePage("hello"))
    log.Fatal(http.ListenAndServe(":8090", router))
}

【问题讨论】:

  • 您要添加的参数的值是否会根据请求更改?或者您是否希望接受在设置路线后不会更改的其他参数?
  • 他们不会改变。但它们的值将首先在主函数中初始化,然后我会将它们传递给多个处理程序。

标签: go mux


【解决方案1】:

执行此操作的常用技术是从接受您想要的任何其他参数的函数返回处理程序,如下所示:

package main

import (
    "net/http"
)

func homePage(msg string) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Do stuff with "msg"
        w.Write([]byte(msg))
    }
}

func main() {
    http.HandleFunc("/", homePage("message"))
    http.ListenAndServe(":8090", nil)
}

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2023-03-17
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多