php-Editor Baicao ist hier, um Ihnen eine Methode zum Ändern von Schnittstellenwerten durch Referenzen vorzustellen. Beim Programmieren müssen wir manchmal die Parameter einer Funktion oder Methode ändern, möchten aber nicht direkt einen neuen Wert zurückgeben, sondern den ursprünglichen Wert durch eine Referenz ändern. In diesem Fall können wir Referenzparameter verwenden. Durch die Referenzierung von Parametern können wir den Wert der übergebenen Variablen direkt innerhalb der Funktion ändern, ohne einen neuen Wert zurückzugeben. Dieser Ansatz verbessert die Leistung und macht den Code prägnanter und lesbarer. Im nächsten Artikel erklären wir ausführlich, wie Sie Referenzparameter verwenden, um Schnittstellenwerte zu ändern.
package main import ( "fmt" ) // -------- library code. can't change ------------ type client struct { transport roundtripper } type roundtripper interface { do() } type transport struct{} func (d transport) do() {} var defaulttransport roundtripper = transport{} // -------- my code. can change ------------ func changetransport(r roundtripper) { if r == nil { fmt.println("transport is nil") r = defaulttransport } } func main() { c := client{} changetransport(c.transport) fmt.println(c.transport) }
Ausgabe:
transport is nil <nil>
Erwartet:
transport is nil {}
Spielplatz
Ich habe dies auch basierend auf https://stackoverflow.com/a/44905592/6740589 versucht:
func changetransport(r roundtripper) { if r == nil { fmt.println("transport is nil") d, ok := defaulttransport.(transport) if !ok { log.fatal("impossible") } if t, ok := r.(*transport); ok { t = &d fmt.println("ignoreme", t) } else { log.fatal("uff") } } }
Ausgabe:
transport is nil 2009/11/10 23:00:00 Uff
Playground
Verwenden Sie roundtripper
接口的指针作为changetransport
Funktionsparameter, um den Wert eines Zeigers zu ändern:
// -------- my code. can change ------------ func changetransport(r *roundtripper) { if r != nil && *r == nil { fmt.println("transport is nil") *r = defaulttransport } } func main() { c := client{} changetransport(&c.transport) fmt.println(c.transport) }
transport is nil {}
Das obige ist der detaillierte Inhalt vonSchnittstellenwert durch Referenz ändern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!