2017-06-26 4 views
0

Ich muss eine Schnittstelle eines Strukturtyps durch Referenz übergeben, wie unten gezeigt. Da ich Zeiger der Schnittstelle zu Variablen des Strukturtyps nicht verwenden kann, wie soll ich den folgenden Code ändern, um te Wert zu 10 zu ändern?Wie Schnittstelle von Strukturtyp durch Verweis in Golang übergeben?

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) 
} 

Vielen Dank!

P.S Ich habe gelesen, dass die Weitergabe von Zeigern an Schnittstellen keine sehr gute Praxis ist. Bitte lassen Sie mich wissen, was könnte ein besserer Weg sein, damit umzugehen

+1

Go hat keine Ahnung von Pass durch Referenz. – Volker

+0

@Volker: Entschuldigung für den Missbrauch des Begriffs, aber ich hoffe, Sie haben meine Absicht der Frage – re3el

+1

Um etwas Ähnliches wie Pass-by-Referenz in gehen, müssen Sie Zeiger verwenden. –

Antwort

5

Sie verwenden also eine Schnittstelle, und Sie brauchen eine Art Garantie, dass Sie den Wert eines Mitglieds der Struktur festlegen können? Klingt so, als sollten Sie diese Garantie zu einem Teil der Schnittstelle machen, so etwas wie:

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

danke @dave! – re3el

Verwandte Themen