Heim >Backend-Entwicklung >Golang >Später wird der neue Wert dem zugrunde liegenden Objekt der Schnittstelle in go zugewiesen
Der PHP-Editor Banana stellt Ihnen in diesem Artikel ein wichtiges Konzept vor: „Späteres Zuweisen neuer Werte zu den zugrunde liegenden Objekten der Schnittstelle in go“. Dieses Konzept ist in der Go-Sprache sehr verbreitet und ermöglicht es uns, die zugrunde liegenden Objekte der Schnittstelle zur Laufzeit dynamisch zu ändern und so eine flexiblere Programmierung zu ermöglichen. Auf diese Weise können wir die spezifische Implementierung der Schnittstelle ersetzen, ohne die Schnittstellendefinition zu ändern, und so eine Codeerweiterung und Flexibilität erreichen. In den folgenden Artikeln werden wir die Prinzipien und die Verwendung dieses Konzepts im Detail besprechen.
Ich versuche, der zugrunde liegenden Struktur einer Schnittstelle im folgenden Code neue Werte zuzuweisen. Aber es behält die alten Werte bei. Unten finden Sie Beispielcode.
package main import ( "fmt" "math" ) type Shape interface { Area() float64 } type Circle struct { Radius float64 Name string } func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius } type Rectangle struct { Length float64 Width float64 Name string } func (r Rectangle) Area() float64 { return r.Length * r.Width } func assignRadius(s Shape, radius float64, name string) { switch s := s.(type) { case Circle: s.Radius = radius s.Name = name case Rectangle: s.Length = radius s.Name = name } } func main() { var s Shape c := Circle{Radius: 0, Name: "My Circle"} s = c fmt.Println(s.Area()) fmt.Println(c.Radius) fmt.Println(c.Name) assignRadius(s, 10, "My New Circle") fmt.Println(c.Radius) fmt.Println(c.Name) }
Der Typ der Form
ist in assignradius
nicht im Voraus bekannt. Ich weiß, dass das mit Zeigern zu tun hat. Aber ich kann es nicht herausfinden. shape
的类型在 assignradius
中事先未知。我知道这与指针有关。但想不通。
接口变量 s
s
enthält eine Kopie des Formwerts. Um es so zu ändern, wie Sie es versuchen, muss es einen Zeiger auf die Form enthalten: 🎜
var s shape c := circle{radius: 0, name: "my circle"} s = &c🎜Und in der Funktion, die sie ändert, müssen Sie Assert-Zeigerwerte eingeben: 🎜
func assignRadius(s Shape, radius float64, name string) { switch s := s.(type) { case *Circle: s.Radius = radius s.Name = name case *Rectangle: s.Length = radius s.Name = name }
Das obige ist der detaillierte Inhalt vonSpäter wird der neue Wert dem zugrunde liegenden Objekt der Schnittstelle in go zugewiesen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!