2017-06-26 2 views
0

以下に示すように、参照によって構造型のインタフェースを渡す必要があります。 struct型変数へのインタフェースのポインタは使用できないので、teの値を10に変更するにはどうすればよいですか?golangでの参照による構造型のインターフェースの受け渡し方法は?

package main 

import (
    "fmt" 
) 

func another(te *interface{}) { 
    *te = check{Val: 10} 
} 

func some(te *interface{}) { 
    *te = check{Val: 20} 
    another(te) 
} 

type check struct { 
    Val int 
} 

func main() { 
    a := check{Val: 100} 
    p := &a 
    fmt.Println(*p) 
    some(p) 
    fmt.Println(*p) 
} 

ありがとうございます!

P.Sインタフェースへのポインタの渡し方はあまり良いことではありません。あなたがそれを処理する良い方法であるかもしれないことを教えてください。

+1

Goには、参照渡しの概念はありません。 – Volker

+0

@Volker:用語の誤用のために申し訳ありませんが、あなたは質問の私の意図を持っていることを願って – re3el

+1

あなたはポインタを使用する必要があります参照渡しで似て何かを行うには。 –

答えて

5

インターフェイスを使用しているので、構造体のメンバの値を設定できる保証が必要ですか?インターフェイスの保証部分にする必要があるように聞こえます。

type Settable interface { 
    SetVal(val int) 
} 

func (c *check) SetVal(val int) { 
    c.Val = val 
} 

func some(te Settable) { 
    te.SetVal(20) 
} 

type check struct { 
    Val int 
} 

func main() { 
    a := check{Val: 100} 
    p := &a 
    some(p) 
    fmt.Println(*p) 
} 
+0

@daveありがとう! – re3el

関連する問題