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 指针的博客文章