Не удается разобрать опубликованные данные формы от beego

Я новичок, чтобы пойти и испытать beego.

Я пытаюсь получить данные опубликованной формы из:

 <form  action="/hello" method="post">
    {{.xsrfdata}}
    Title:<input name="title" type="text" /><br>
    Body:<input name="body" type="text" /><br>    
    <input type="submit" value="submit" />
    </form>

К контроллеру:

type HelloController struct {
    beego.Controller
}


type Note struct {
    Id    int        `form:"-"`
    Title  string `form:"title"` 
    Body   string `form:"body"`            
}

func (this *HelloController) Get() {
    this.Data["xsrfdata"]= template.HTML(this.XSRFFormHTML())
    this.TplName = "hello.tpl"
}

func (this *HelloController) Post() {
    n := &Note{}
    if err := this.ParseForm(&n); err != nil {    
            s := err.Error()
           log.Printf("type: %T; value: %q\n", s, s)             
    }

    log.Printf("Your note title is %s" , &n.Title)
    log.Printf("Your note body is %s" , &n.Body)
    this.Ctx.Redirect(302, "/")    
}

Но вместо строковых значений, введенных в поле, я получаю:

Your note title is %!s(*string=0xc82027a368)
Your note body is %!s(*string=0xc82027a378)

Я следил за документами по обработке запросов, но не знал, почему не могут быть опубликованы строки .


person Karlom    schedule 23.04.2016    source источник
comment
Вы получаете адреса указателей, а если вы измените log.Printf(название вашей заметки %s , &n.Title) на это -> log.Printf(название вашей заметки %s , n.Title)   -  person chespinoza    schedule 23.04.2016
comment
Затем я получаю такие вещи, как Your note title is 0xc820267d18   -  person Karlom    schedule 23.04.2016
comment
Но, проверив документацию, способ определения структуры (в вашем случае Note) - это тип структуры, а не указатель (&) на эту структуру, тогда в вашем коде вы должны быть n:=Note{}   -  person chespinoza    schedule 23.04.2016
comment
Ты прав. Пожалуйста, ответьте, и я приму. Спасибо!   -  person Karlom    schedule 23.04.2016


Ответы (1)


Из документации способ определения структуры получателя должен заключаться в использовании типа структуры, а не указателя на эту структуру:

func (this *MainController) Post() {
    u := User{}
    if err := this.ParseForm(&u); err != nil {
        //handle error
    }
}

Затем в вашем контроллере все должно быть лучше, если вы..

func (this *HelloController) Post() {
    n := Note{}
    ...
 }

Подробнее об указателях в go: https://tour.golang.org/moretypes/1

person chespinoza    schedule 23.04.2016