mysql之golang MySQL segfaulting 一旦抽象

yxwkf 阅读:227 2025-06-02 22:19:02 评论:0

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

1年前关闭。




Improve this question




基本上,我正在尝试对 sql.db 结构进行抽象,以便为它编写自己的函数。但是,当我尝试这样做时,它会不断出现段错误,我不知道为什么。本质上,我有一个名为 ExtendedDB 的 sql.db 抽象,它是一个包含 sql.db 的结构。我这样做是为了编写我自己的函数来作用于 ExtendedDB 结构。对它的处理发生在 mysqlhandler.go 我对较低级别的编程相对较新,所以我认为它与指针处理不当有关。任何帮助表示赞赏!
编辑:当我调用 rows.Columns() 以验证查询是否通过时,第 25 行令人 panic 。然而,奇怪的是,在调试时它会将行识别为 *sql.rows 类型,这是正确的。此外,我知道这不会像我执行 err != nil 一样出错。检查它是否通过。
main.go

package main 
 
import ( 
    "fmt" 
    "log" 
    "os" 
 
    "github.com/blackcoffee77/tuilight/dbhandlers" 
 
    _ "github.com/go-sql-driver/mysql" 
    "github.com/joho/godotenv" 
) 
 
func main() { 
    err := godotenv.Load() 
    if err != nil { 
        log.Fatal("Error loading .env file") 
    } 
    conn := os.Getenv("DATABASE_CONN") 
    edb := dbhandlers.DBInit(conn) 
    fmt.Println("here2") 
    fmt.Printf("%T", edb.DB) 
    rows, _ := edb.DB.Query("select * from people where id = ?", 1) 
 
    fmt.Println(rows.Columns()) 
    edb.GetAll() 
    fmt.Println("here6") 
 
} 
mysqlhandler.go
package dbhandlers 
 
import ( 
    "database/sql" 
    "fmt" 
    "log" 
) 
 
type ExtendedDB struct { 
    DB   *sql.DB 
    Conn string 
} 
 
func (edb *ExtendedDB) getTables() *sql.Rows { 
    fmt.Println("here5") 
    res, _ := edb.DB.Query("select * from people where id = ?", 1) 
    fmt.Println("here4") 
    fmt.Println(res) 
    return res 
} 
 
func (edb *ExtendedDB) GetAll() { 
    tables := edb.getTables() 
    fmt.Println("here3") 
    fmt.Println(tables) 
    // fmt.Println(tables.Columns()) 
 
} 
 
func DBInit(conn string) *ExtendedDB { 
    db, err := sql.Open("mysql", conn) 
    if err != nil { 
        log.Fatal(err) 
    } 
    defer db.Close() 
    fmt.Println("got here") 
 
    err = db.Ping() 
    if err != nil { 
        log.Fatal(err) 
    } 
    edb := ExtendedDB{DB: db, Conn: conn} 
    return &edb 
} 

请您参考如下方法:

defer db.Close()”在 DBinit 时与数据库断开连接。函数退出


标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号