Api 如何在go lang中将数据从控制器传递到窗体?
我有一个接受http请求的处理程序/控制器Api 如何在go lang中将数据从控制器传递到窗体?,api,go,Api,Go,我有一个接受http请求的处理程序/控制器 func UpdateHandler(request *http.Request) { ID := mux.Vars(request)["ID"] UpdateForm.Save(ID,db) } 然后我有一个表单,我想处理数据并最终更新它 type UpdateForm struct { ID string `json:"type"` } func (UpdateForm)
func UpdateHandler(request *http.Request) {
ID := mux.Vars(request)["ID"]
UpdateForm.Save(ID,db)
}
然后我有一个表单,我想处理数据并最终更新它
type UpdateForm struct {
ID string `json:"type"`
}
func (UpdateForm) Save(db mongo.Database) {
id := ID
repository.Update(Id)
}
Go将打印出未定义的ID
如何确保表单从控制器获取值?我认为这与处理程序无关,但您的代码不一致。这条线
UpdateForm.Save(ID,db)
方法Save()
接受两个参数,而原始方法签名只接受一个mongo.Database
类型参数
以下是我认为你的意图:
type UpdateForm struct {
ID string `json:"type"`
}
func (u UpdateForm) Save(db mongo.Database) {
id := u.ID
repository.Update(id)
}
// UpdateForm instance somewhere
var u = UpdateForm{}
func UpdateHandler(request *http.Request) {
u.ID := mux.Vars(request)["ID"]
u.Save(db)
}
您可以使用请求中的数据填充表单。如果您的请求包含JSON编码的正文,则可以将其解码为表单对象,如下所示:
package main
import (
"encoding/json"
"net/http"
"strings"
"fmt"
)
type UpdateForm struct {
ID string `json:"type"`
}
func main() {
req, _ := http.NewRequest(
"POST",
"http://example.com",
strings.NewReader(`{"type": "foo"}`),
)
var form *UpdateForm
json.NewDecoder(req.Body).Decode(&form)
fmt.Println(form.ID) // Output: foo
}
func UpdateHandler(request *http.Request) {
ID := mux.Vars(request)["ID"]
form := &UpdateForm{ID: ID}
form.Save()
}
或者您可以像下面这样直接实例化它:
package main
import (
"encoding/json"
"net/http"
"strings"
"fmt"
)
type UpdateForm struct {
ID string `json:"type"`
}
func main() {
req, _ := http.NewRequest(
"POST",
"http://example.com",
strings.NewReader(`{"type": "foo"}`),
)
var form *UpdateForm
json.NewDecoder(req.Body).Decode(&form)
fmt.Println(form.ID) // Output: foo
}
func UpdateHandler(request *http.Request) {
ID := mux.Vars(request)["ID"]
form := &UpdateForm{ID: ID}
form.Save()
}
你对“某处”的评论正是让我心烦的地方。实例化在哪里?如何将数据从一个文件中的一个方法传递到另一个文件中,这基本上是我问题的关键。@thatgibbyguy您可以通过调用方法(或函数)并将数据作为参数,将数据从一个方法传递到另一个方法(或从一个函数传递到另一个函数)。嗯,这应该是非常明显的。请注意,Go没有“基于文件的边界”,某些方法驻留在哪个文件中并不重要。(包装很重要,但对于出口货物来说一切都很好)。“在某处实例化”的东西:这取决于,例如在更新处理程序中,或者在全局范围或其他地方。这取决于您尝试执行的操作。实际上,不,UpdateForm方法应该有两个参数-ID和DB,因为ID应该传递给另一个函数。我只是说您的代码不一致,因为在声明中Save()方法只接收一个参数DB。