使用 xlsx 包崩溃:运行时错误:内存地址无效或 nil 指针取消引用 Go


var(    
    file            *xlsx.File
    sheet           *xlsx.Sheet
    row             *xlsx.Row
    cell            *xlsx.Cell
)
func addValue(val string) {     
        cell = row.AddCell()
        cell.Value = val
}

并从 http://github.com/tealeg/xlsx 进口

当控制来到这条线上时

cell = row.AddCell()

这是恐慌。错误:

panic:运行时错误:无效的内存地址或 nil 指针取消引用

有人可以建议这里出了什么问题吗?

零指针取消引用

如果尝试读取或写入地址0x0,硬件将引发一个异常,该异常将被 Go 运行时捕获,并引发恐慌。如果未恢复死机,则会生成堆栈跟踪。

当然,您正在尝试使用零值指针进行操作。

func addValue(val string) {
    var row *xlsx.Row // nil value pointer
    var cell *xlsx.Cell
    cell = row.AddCell() // Attempt to add Cell to address 0x0.
    cell.Value = val
}

首先分配内存

func new(Type) *Type

它是一个分配内存

的内置函数,但与其他一些语言中的同名函数不同,它不会初始化内存,它只会将其归零。也就是说,new(T( 为 T 类型的新项目分配零存储,并返回其地址,即 *T 类型的值。在 Go 术语中,它返回一个指向新分配的类型 T 零值的指针。

使用 new 函数而不是 nil 指针:

func addValue(val string) {
    row := new(xlsx.Row)
    cell := new(xlsx.Cell)
    cell = row.AddCell()
    cell.Value = val
}

查看有关 nil 指针的博客文章

相关内容

  • 没有找到相关文章

最新更新