Rumah > Artikel > pembangunan bahagian belakang > Kemudian memberikan nilai baharu kepada objek asas antara muka dalam go
editor php Banana akan memperkenalkan anda kepada konsep penting dalam artikel ini: "Kemudian memberikan nilai baharu kepada objek asas antara muka dalam go". Konsep ini sangat biasa dalam bahasa Go, dan ia membolehkan kami menukar objek asas antara muka secara dinamik pada masa jalan, sekali gus mencapai pengaturcaraan yang lebih fleksibel. Dengan cara ini, kita boleh menggantikan pelaksanaan khusus antara muka tanpa mengubah definisi antara muka, dengan itu mencapai pengembangan dan fleksibiliti kod. Dalam artikel berikut, kita akan membincangkan prinsip dan penggunaan konsep ini secara terperinci.
Saya cuba memberikan nilai baharu kepada struktur asas antara muka dalam kod di bawah. Tetapi ia mengekalkan nilai lama. Di bawah adalah contoh kod.
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) }
Jenis bentuk
tidak diketahui terlebih dahulu dalam assignradius
. Saya tahu ini ada kaitan dengan petunjuk. Tetapi saya tidak dapat memikirkannya. shape
的类型在 assignradius
中事先未知。我知道这与指针有关。但想不通。
接口变量 s
var s shape c := circle{radius: 0, name: "my circle"} s = &c🎜Dan dalam fungsi yang mengubah suainya, anda perlu menaip nilai penuding tegas: 🎜
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 }
Atas ialah kandungan terperinci Kemudian memberikan nilai baharu kepada objek asas antara muka dalam go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!