2017-05-02 11 views
-2

構造体内の値を変更しようとしています。残念ながら、 "" ==> "、flow"の値は変更されません。なぜか分からない。ポインタで属性値を変更する方法

スライスでポインタが対応していない理由を説明できますか?私はポインタのスライスを書く必要がありますか?

ありがとうございます。あなたの関数で

package main 

import (
    "fmt" 
) 

type Foo struct { 
    value float64 
} 

var flows []Foo; 

func AddFoo(foo Foo) { 
    flows = append(flows, foo) 
} 

func UpdateFoo(stream *Foo) { 
    stream.value = 5.00 
} 

func main() { 
    x := Foo{1.00} 
    AddFoo(x) 
    UpdateFoo(&x) 
    fmt.Println(x) 


    for _, flow := range flows { 
     fmt.Println(" ==>", flow) 
     } 
} 
+0

あなたの 'x'が' flows'に追加されました。次に、xを変更します。これは 'flows'の中の値を変更しません。それは 'a:= 3; b:= a; a = 5; fmt.Println(b); '' b'の値は 'a'の値のコピーで、' b'が変わると変になります。スライスと同じです。もう一度Go of Tourであなたのやり方を進めてください。 – Volker

+0

ありがとうVolker。それは本当です。この助けをありがとうございました。 – AkrogAmes

答えて

1

AddFooあなたはその後、UpdateFooにあなたはスライス内のものと同じ変数ではありませんxを変更している、あなたのスライスにはFooのコピーを追加しています。

はい、ポインタのスライスを作成すると、workとなります。

+0

ありがとうございました。私は私の質問の前にポインタのスライスを作成しようとしたが、私は別の関数でエラーがあった。だからこの質問のために私を許しなさい。私は疲れました – AkrogAmes

関連する問題