0

我是新手,正在体验beego。

我正在尝试从以下位置获取发布的表单数据:

 <form  action="/hello" method="post">
    {{.xsrfdata}}
    Title:&lt;input name="title" type="text" /><br>
    Body:&lt;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)

我遵循了有关请求处理的文档,但不知道为什么不能发布字符串。

4

1 回答 1

2

从文档中,定义接收器结构的方法应该是使用结构类型,而不是指向该结构的指针:

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

于 2016-04-23T15:50:31.140 回答