从函数返回正确的对象

时间:2019-07-16 00:56:06

标签: go

在功能Demo1_CallFindAll()中,我试图从数据库中返回一个对象。

foo()中,使用“打印”后看不到它。但是,我调用了Demo1_CallFindAll函数,并且可以看到其中的对象数组。

请解释原因并更正我的代码。

func foo(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    var tags = Demo1_CallFindAll()
    fmt.Println(tags) // Here I see nothing
    js, err := json.Marshal(tags)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "application/json")
    w.Write(js)

    json.NewEncoder(w).Encode("OKOK")
}

func Demo1_CallFindAll()(products []entities.Product)  {
    db,err:=config.GetMySQLDB()
    if err !=nil{
        fmt.Println(err)
    }else{
        productModel := models.ProductModel{
            Db:db,
        }
        products,err := productModel.FindAll()
        if err !=nil{
            fmt.Println(err)
        }else{
fmt.Println(products)//[{1 Nokia1 10 2 true} {2 Nokia2 11 22 false}]

            fmt.Println("Product List")
        }
    }
    return
}

1 个答案:

答案 0 :(得分:2)

该错误位于此行:products,err := productModel.FindAll()。您在Demo1_CallFindAll()函数中使用了命名返回参数。命名的返回参数被初始化为其零值(参考:https://golang.org/doc/effective_go.html#named-results)。

但是在行products,err := productModel.FindAll()中,您创建了一个新变量(通过:=products,并在其中设置了结果,而不是在返回参数products中设置了结果。这就是为什么您无法在foo()函数中看到任何内容的原因。要解决此问题,请将:=更改为=products,err = productModel.FindAll()