Api 如何在go lang中将数据从控制器传递到窗体?

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)

我有一个接受http请求的处理程序/控制器

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。