我可以在不先在Golang func中扫描的情况下从数据库返回行结果吗?

我有使用Golang的迷你项目,我的计划是制作一个基本函数,它将从模型中调用以执行sql查询,然后返回行结果而无需先扫描它。我正在使用这种方式来防止忘记编写和代码,以便在模型中执行查询更简单。我尝试过这种方式,但是当尝试打印结果时,我得到了零,没有任何错误。这是我的屏幕拍摄。当执行查询和扫描的行结果在同一函数中时,结果就存在。也许我错过了什么?这是我的第一个问题,抱歉它太长了。谢谢defer rows.Close()

将在其中执行 SQL 查询并返回结果的基本模型

package model


import "database/sql"

import "hb-backend-v1/config/database"

import "fmt"


func Query(query string) (*sql.Rows, error){

    connect, err := database.Connect()


    if err != nil{

        fmt.Println("Connection Failed")

        return nil, err

    }

    fmt.Println("Connection Success")

    defer connect.Close()


    rows, err := connect.Query(query)


    defer rows.Close()

    if err != nil{

        return nil, err

    }


    return rows, nil

}


拉丁的传说
浏览 79回答 1
1回答

眼眸繁星

两者一旦退出就会被关闭,在这两个关闭后,您将无法再使用。connectionrowsQueryrows解决这个问题的一种方法是传递一个闭包,并在关闭两个资源之前执行它:QueryQueryfunc Query(query string, scan func(*sql.Rows) error) error {    connect, err := database.Connect()    if err != nil{        return err    }    defer connect.Close()    rows, err := connect.Query(query)    if err != nil{        return err    }    defer rows.Close()    return scan(rows)}func ProductList() ([]Hasil, error) {    var result []Hasil    err := model.Query("SELECT * FROM alamat_store", func(rows *sql.Rows) error {        for rows.Next() {            var each = Hasil{}            var err = rows.Scan(&each.Id_alamat_store, &each.Id_tk, &each.Alamat, &each.Id_wil, &each.Latitude, &each.Longitude)            if err != nil {                return err            }            result = append(result, each)        }        return nil    })    if err != nil {        return nil, err    }    return result, nil}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go