Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing arguments to mux handler function in golang

Tags:

go

mux

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))
}
like image 291
MohamedSaeed Avatar asked Dec 23 '22 17:12

MohamedSaeed


1 Answers

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)
}
like image 132
kingkupps Avatar answered Jan 02 '23 02:01

kingkupps