在功能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
}
答案 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()
。