мы можем передать дополнительный параметр маршрутизатору beego

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)

}

это обычный маршрутизатор beego, который выполняется при появлении URL-адреса. я хочу что-то вроде

type MainController struct {
    beego.Controller
}

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

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

}

для использования указателя соединения с базой данных. возможно ли добиться этого с помощью go... если нет, предложите


person gophervk    schedule 27.02.2017    source источник


Ответы (1)


Вы не можете сделать это в голанге

type MainController struct {
    beego.Controller }

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

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

}

декларация по форме

function (c *MainController)Post()

означает, что Post — это метод для структуры MainController, в которую вы можете передать переменную.

Я предлагаю вам объявить указатель db как глобальную переменную в вашем пакете, как показано ниже, тогда вы сможете использовать его внутри функции Post

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)

}

но, учитывая, что это Beego, который использует шаблон MVC, вы можете сделать все это внутри модели. Я предлагаю вам взглянуть на их замечательную документацию здесь

person foecum    schedule 27.02.2017
comment
именно я пытался сделать то же самое, пока вы опубликовали то, что я пытался сделать ..... это работает для меня - person gophervk; 27.02.2017