Go语言如何向结构体中*[]Category类型的切片指针追加数据?
Go 切片指针的append操作解决方案
错误原因
append内置函数要求第一个入参为切片类型,第二段代码中Categories是*[]Category类型的切片指针,直接传入append会触发类型不匹配报错- 零值声明的指针默认是nil,未指向实际的切片内存空间,未初始化直接操作会触发空指针异常
修复方案
仅需在main函数中做两处调整即可实现和原代码完全一致的效果:
- 初始化
book.Categories指针,使其指向一个空的[]Category切片 - 执行append操作时,先对切片指针做
*解引用拿到底层切片,操作完成后赋值回解引用后的地址
修改后的完整main函数代码
func main() { var book Book book.Id = 1 book.Name = "Vanaraj" // 新增:初始化切片指针 book.Categories = &[]Category{} for i := 0; i < 10; i++ { // 修改:解引用后执行append *book.Categories = append(*book.Categories, Category{ Id: 10, Name: "Vanaraj", }) } // 若要完全匹配原输出格式,打印时对Categories解引用即可 fmt.Printf("{%d %s %v}\n", book.Id, book.Name, *book.Categories) }
运行后输出和第一段代码完全一致,会输出包含10个Category元素的结构体内容。
内容的提问来源于stack exchange,提问作者radren
相关产品推荐
相关产品推荐

