初学go,读取数据库写入文件报错

报错signal SIGSEGV: segmentation violation code=0x1 addr=0x38 pc=0x11fd947

package main

import (
    "database/sql"
    "fmt"
    "log"
    _ "github.com/go-sql-driver/mysql"
    "github.com/tealeg/xlsx"
)

var (
    dbHostsIp  = "主机"
    dbUserName = "用户名称"
    dbPassword = "数据库密码"
    dbName     = "数据库名称"
)

func main() {
    db, err := sql.Open("mysql", "root:univer@tcp(10.10.0.49:3306)/audit_test?charset=utf8")
    if err != nil {
        fmt.Println(err)
        return
    }

    defer db.Close()

    fmt.Println("成功连接到数据库")

    var fileX *xlsx.File
    var sheetX *xlsx.Sheet
    var rowX *xlsx.Row
    var cellX *xlsx.Cell


    /*
        忽略返回值
        比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,
        这样的话代码可以这样写

        v1, v2, _ := function(...)
     */
    fileX, _ = xlsx.OpenFile("MyXLSXFile.xlsx")
    sheetX = fileX.Sheet["Sheet1"]

    rows, err := db.Query("select * from media;")

    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    columns, err := rows.Columns()
    if err != nil {
        log.Fatal(err)
    }

    values := make([]sql.RawBytes, len(columns))
        scanArgs := make([]interface{}, len(values))
        for i := range values {
            scanArgs[i] = &values[i]
        }
        for rows.Next() {
            rowX = sheetX.AddRow()
            err = rows.Scan(scanArgs...)
            if err != nil {
                log.Fatal(err)
            }
            var value string
            for i, col := range values {
                if col == nil {
                    value = "NULL"
                } else {
                    value = string(col)
                }
                fmt.Println(columns[i], ": ", value)
                cellX = rowX.AddCell()
                cellX.Value = value
                fileX.Save("MyXLSXFile1.xlsx")
            }
            fmt.Println("------------------")

        }
        if err = rows.Err(); err != nil {
            log.Fatal(err)
        }



}
阅读 3.9k
2 个回答

初步判断是空指针,我看你fileX这几个变量定义了没有初始化,但是下面用到了。

新手上路,请多包涵

这个问题很可能是因为你的数据库连接建立失败了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题