2017-05-12 3 views

Antwort

1

Nicht sicher, ob Sie das suchen, , aber ja, Sie können den Wert eines Zeigers auf etwas anderes ändern. Die code below drucken 2 und 3:

package main 

import (
    "fmt" 
) 

func main() { 
    i := 1 

    testAsAny(&i) 
    fmt.Println(i) 

    testAsInt(&i) 
    fmt.Println(i) 
} 

func testAsAny(ptr interface{}) { 
    *ptr.(*int) = 2 
} 

func testAsInt(i *int) { 
    *i = 3 
} 
2

jetzt hier den Wert zu setzen, das Paket reflektieren verwenden. Der Schlüsselpunkt ist, das Element des Zeigers und nicht den Zeiger selbst zu setzen.

func test(ptr interface{}) { 
    v := reflect.ValueOf(ptr).Elem() 
    v.SetInt(2) 
} 

playground example

Beachten Sie, dass das Paket widerspiegeln wird für dieses spezielle Beispiel nicht erforderlich, da in einer anderen Antwort gezeigt.

+0

Das funktioniert auch! Stellt sich heraus, ich sollte die Gesetze der Reflexion lesen. –

Verwandte Themen