鍍金池/ 問答/GO/ 初學(xué)go,讀取數(shù)據(jù)庫寫入文件報錯

初學(xué)go,讀取數(shù)據(jù)庫寫入文件報錯

報錯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  = "主機(jī)"
    dbUserName = "用戶名稱"
    dbPassword = "數(shù)據(jù)庫密碼"
    dbName     = "數(shù)據(jù)庫名稱"
)

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("成功連接到數(shù)據(jù)庫")

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


    /*
        忽略返回值
        比如某個函數(shù)返回三個參數(shù),但是我們只需要其中的兩個,另外一個參數(shù)可以忽略,
        這樣的話代碼可以這樣寫

        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)
        }



}
回答
編輯回答
凹凸曼

初步判斷是空指針,我看你fileX這幾個變量定義了沒有初始化,但是下面用到了。

2018年1月28日 15:47