Go指標複製問題

adolphlwq發表於2017-06-06
package main

import "fmt"

type R struct {
    ID  int
    CPU float32
    MEM float32
}

func main() {
    rr := GetR()
    var rs []*R
    for k, r := range *rr {
        fmt.Printf("%dth r, id: %d, cpu: %f, mem: %f\n", k, r.ID, r.CPU, r.MEM)
        rs = append(rs, &r)
    }
    fmt.Println(rs)
    iter(&rs)
}

func NewR(i int, c, m float32) *R {
    return &R{
        ID:  i,
        CPU: c,
        MEM: m,
    }
}

func iter(rs *[]*R) {
    for _, r := range *rs {
        fmt.Printf("id: %d, cpu: %f, mem: %f\n", r.ID, r.CPU, r.MEM)
    }
}

func GetR() *[]R {
    rr := &[]R{
        *NewR(0, 4.0, 16000.0),
        *NewR(1, 2.0, 8000.0),
        *NewR(2, 1.0, 4000.0),
    }
    return rr
}

這段程式碼輸出為什麼是這個?希望麻煩大家幫忙解答下。https://github.com/dockerq/go-pointer-trick

0th r, id: 0, cpu: 4.000000, mem: 16000.000000
1th r, id: 1, cpu: 2.000000, mem: 8000.000000
2th r, id: 2, cpu: 1.000000, mem: 4000.000000
[0xc42000e2a0 0xc42000e2a0 0xc42000e2a0]
id: 2, cpu: 1.000000, mem: 4000.000000
id: 2, cpu: 1.000000, mem: 4000.000000
id: 2, cpu: 1.000000, mem: 4000.000000
更多原創文章乾貨分享,請關注公眾號
  • Go指標複製問題
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章