Search code examples
sqlgocontrollerbeego

can we pass extra parameter to a beego router


type MainController struct {
    beego.Controller
}

func (this *MainController) Post() {
    var datapoint User
    req := this.Ctx.Input.RequestBody
    json.Unmarshal([]byte(req), &datapoint)
    this.Ctx.WriteString("hello world")
    //  result := this.Input()
    fmt.Println("input value is", datapoint.UserId)

}

this is normal beego router which executes on url occurrence. I want something like

type MainController struct {
    beego.Controller
}

func (this *MainController,db *sql.DB) Post() {

    fmt.Println("input value is", datapoint.UserId)

}

in order to use database connection pointer. is this possible to achieve this using go...if not please suggest


Solution

  • You can't do this in golang

    type MainController struct {
        beego.Controller }
    
    func (this *MainController,db *sql.DB) Post() {
    
        fmt.Println("input value is", datapoint.UserId)
    
    }
    

    the declaration in the form

    function (c *MainController)Post()
    

    means that Post is a method for the MainController struct you can pass variable into it.

    My suggestion is you declare the db pointer as a global variable in your package like below then you will be able to use it inside the Post function

    type MainController struct {
        beego.Controller
    }
    
    var db *sql.DB
    
    func (this *MainController) Post() {
        //you can now use the variable db inside here
        fmt.Println("input value is", datapoint.UserId)
    
    }
    

    but considering this is Beego which uses the MVC pattern you can do all this from within the model. I suggest you take a look at their awesome documentation here