Go Slice踩坑
Go Slice踩坑
Go中的slice内部是实现的如下:
type slice struct {
array unsafe.Pointer // 底层数组指针
len int // 使用的长度
cap int // slice 容量
}
踩坑代码如下:
操作数据库代码:
func (m *monitorRepository) GetAllMonitoringURL(db *gorm.DB, urlM []model.URLMonitor) (err error) {
err = db.Where("is_delete = ?", 0).Find(&urlM).Error
return
读取数据内容
func ReadUsingSchedule() {
urls := []model.URLMonitor{}
repositories.MonitorRepository.GetAllMonitoringURL(databases.DB(), urls)
fmt.Println(urls)
}
结果为空[]
当向GetAllMonitoringURL传递切片时,由于Go全部是值传递,但是urls中存了底层数组的指针,复制不会发生变化。传递进去后发现没有结果。
造成这种情况的原因是当切片发生扩容时,地址数组指向原数组的不会变,但是会添加新的数组指针。
作者: 咕咚!
出处: https://www.cnblogs.com/linga/
关于作者:专注虚拟化,运维开发,RPA,Rust,Go,Python!
本文版权归作者和博客园共有,禁止*.csdn.net转载,禁止以盈利为目的的转载,转载文章,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(oldsixa@163.com)咨询.