dou47732 2017-07-14 03:05
浏览 44
已采纳

如何从函数返回slice的更改值?

I'm new to go so forgive me if this is a trivial question. I want to iterate over a slice of posts and increment the value of Views of each post:

    func incrementViews(posts []model.Post) []model.Post {
        for _, v := range posts { 
            v.Views++
            fmt.Println(v.Views) //Views incremented by 1
        }
        return posts
    }

    incrementViews(posts) //Views not changed

The printed values are changed but when I call incrementViews(posts) the returned values are unchanged.

I tried to solve this by using * of & but could not manage to do so perhaps because I come from Python background and have lose grasp of moving around variables by pointers and values.

  • 写回答

2条回答 默认 最新

  • dr5779 2017-07-14 03:09
    关注

    The code in the question is updating the local variable v. Either change the slice to *model.Post or update the value in the slice using the index operator. The former requires changes to the caller.

    func incrementViews(posts []*model.Post) []*model.Post {
        for _, v := range posts { 
            v.Views++
        }
        return posts
    }
    
    func incrementViews(posts []model.Post) []model.Post {
        for i := range posts { 
            posts[i].Views++
        }
        return posts
    }
    

    EDIT:

    Both approaches works, see here: https://play.golang.org/p/90BNOFYaKL

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线