Pointers 使用xlsx包时死机:运行时错误:无效内存地址或零指针取消引用Go

Pointers 使用xlsx包时死机:运行时错误:无效内存地址或零指针取消引用Go,pointers,go,dereference,panic,Pointers,Go,Dereference,Panic,从 当控制权到达这条线时 var( file *xlsx.File sheet *xlsx.Sheet row *xlsx.Row cell *xlsx.Cell ) func addValue(val string) { cell = row.AddCell() cell.Value = val } 这是恐慌。 错误: 死

当控制权到达这条线时

var(    
    file            *xlsx.File
    sheet           *xlsx.Sheet
    row             *xlsx.Row
    cell            *xlsx.Cell
)

func addValue(val string) {     
        cell = row.AddCell()
        cell.Value = val
}
这是恐慌。 错误:

死机:运行时错误:无效内存地址或零指针取消引用

有人能告诉我这里出了什么问题吗?

无指针解引用 如果要尝试读取或写入地址0x0,硬件将抛出一个异常,Go运行时将捕获该异常,并抛出死机。如果未恢复死机,将生成堆栈跟踪

显然,您正在尝试使用nil值指针进行操作

cell = row.AddCell()
首先分配内存
func新建(类型)*类型

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

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

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
}

我已经在var(file*xlsx.file sheet*xlsx.sheet row*xlsx.row cell*xlsx.cell)中声明了它@gophervk,您不需要声明零指针。请仔细阅读我的文章和我提到的博客。@gophervk,移除html包装。现在它的格式不正确。l159,我可以使用new编写,但在这里它不会将内容写入公共文件declared@l159,我没有看到任何html包装..有一个输入错误,我清除并更新了
func addValue(val string) {
    row := new(xlsx.Row)
    cell := new(xlsx.Cell)
    cell = row.AddCell()
    cell.Value = val
}