zoukankan      html  css  js  c++  java
  • 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中存了底层数组的指针,复制不会发生变化。传递进去后发现没有结果。

    造成这种情况的原因是当切片发生扩容时,地址数组指向原数组的不会变,但是会添加新的数组指针。

    来啊,造作啊
  • 相关阅读:
    1860 最大数
    1164 统计数字
    1063 合并果子
    1098 均分纸牌
    2806 红与黑
    1168 火柴棒等式
    1910 递归函数
    2774 火烧赤壁
    2017.0705.《计算机组成原理》-存储器
    2017.0704.《计算机组成原理》-动态RAM
  • 原文地址:https://www.cnblogs.com/linga/p/14304184.html
Copyright © 2011-2022 走看看