mysql之golang MySQL segfaulting 一旦抽象
关闭。这个问题需要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 时与数据库断开连接。函数退出
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



