为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 对类型数组中切片字段的引用

Golang 对类型数组中切片字段的引用

Go
慕码人2483693 2021-06-07 09:54:36
我是一名喜欢 Go 的 Python 程序员。经常让我绊倒的事情必须是引用的使用;我已经掌握了它(大部分),但有时有些东西让我感到困惑,比如这个。我有一个简单的类型('Fixture'):type Fixture struct {    Probabilities      *[]float64}如果我为这种类型的单个实例填充概率字段,一切都很好:c := appengine.NewContext(r)f := Fixture{}p := []float64{}p = append(p, 0.5)p = append(p, 0.2)p = append(p, 0.3)f.Probabilities = &pc.Infof("%v", *f.Probabilities)2013/03/19 07:37:36 INFO: [0.5 0.2 0.3]但是,如果我尝试为这些类型的数组填充此字段,则代码会编译但字段值始终为零:c := appengine.NewContext(r)fixtures := []Fixture{}f := Fixture{}fixtures = append(fixtures, f)for _, f := range fixtures {    p := []float64{}    p = append(p, 0.5)    p = append(p, 0.2)    p = append(p, 0.3)    f.Probabilities = &p}for _, f := range fixtures {    // c.Infof("%v", *f.Probabilities) // causes error    c.Infof("%v", f.Probabilities)}2013/03/19 07:37:41 INFO: <nil>我想我不明白数组/切片是如何工作的,尤其是在引用方面。谁能指出我哪里出错了?
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

在范围声明中


for _, f := range fixtures { ... }

f是一个新声明的局部变量类型Fixture。它不是对任何东西的引用。所以在设置它的值之后,它必须被放入fixtures切片。


package main


import "fmt"


type Fixture struct {

        Probabilities *[]float64

}


func main() {

        fixtures := []Fixture{}

        f := Fixture{}

        fixtures = append(fixtures, f)

        for i, f := range fixtures {

                p := []float64{}

                p = append(p, 0.5)

                p = append(p, 0.2)

                p = append(p, 0.3)

                f.Probabilities = &p

                fixtures[i] = f

        }

        for _, f := range fixtures {

                fmt.Printf("%v", f.Probabilities)

        }

}

(也在这里)


输出


&[0.5 0.2 0.3]


查看完整回答
反对 回复 2021-06-07
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

将元素值存储在切片中。例如,


package main


import "fmt"


type Fixture struct {

    Probabilities *[]float64

}


func main() {

    fixtures := make([]Fixture, 1)

    for i := range fixtures {

        p := []float64{0.5, 0.2, 0.3}

        fixtures[i] = Fixture{Probabilities: &p}

    }

    for _, f := range fixtures {

        fmt.Println(*f.Probabilities)

    }

}

输出:


[0.5 0.2 0.3]


查看完整回答
反对 回复 2021-06-07
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号