ds2321 2013-05-14 10:12
浏览 6
已采纳

为什么通过方法对结构所做的更改不持久?

I'm trying to understand why the following test code is not working as expected:

package main

import (
    "fmt"
    "strings"
)

type Test struct {
    someStrings []string
}

func (this Test) AddString(s string) {
    this.someStrings = append(this.someStrings, s)
    this.Count() // will print "1"
}

func (this Test) Count() {
    fmt.Println(len(this.someStrings))
}

func main() {
    var test Test
    test.AddString("testing")
    test.Count() // will print "0"
}

This would print:

"1"
"0"

Meaning that someStrings is apparently modified... and then it's not.

Anybody know what could be the issue?

  • 写回答

3条回答 默认 最新

  • dongtangu6144 2013-05-14 10:18
    关注

    The AddString method is using a value (copy) receiver. The modification is made to the copy, not the original. A pointer receiver must be used to mutate the original entity:

    package main
    
    import (
            "fmt"
    )
    
    type Test struct {
            someStrings []string
    }
    
    func (t *Test) AddString(s string) {
            t.someStrings = append(t.someStrings, s)
            t.Count() // will print "1"
    }
    
    func (t Test) Count() {
            fmt.Println(len(t.someStrings))
    }
    
    func main() {
            var test Test
            test.AddString("testing")
            test.Count() // will print "0"
    }
    

    Playground


    Output

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

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测