MohamedSaeed
MohamedSaeed

Reputation: 595

Passing arguments to mux handler function in golang

I'm trying to use mux and set some handlers. I have the following handler

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))
}

Is there any way to pass more arguments to the handler function so that I can do more logic? I mean add an argument to homePage function called message. Something like this...

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))
}

Upvotes: 5

Views: 4280

Answers (1)

kingkupps
kingkupps

Reputation: 3534

A common technique for doing this is to return your handlers from a function that accepts any additional parameters you want like this:

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)
}

Upvotes: 14

Related Questions