Dalam Go, anda boleh menggunakan fungsi tanpa nama untuk mewarisi fungsi Caranya adalah seperti berikut: Lulus fungsi asal sebagai parameter fungsi tanpa nama panggilan.
Bagaimana untuk Mewarisi fungsi dalam Go?
Tiada konsep pewarisan langsung dalam bahasa Go, tetapi kita boleh menggunakan fungsi tanpa nama untuk mensimulasikan tingkah laku ini.
Mewarisi fungsi menggunakan fungsi tanpa nama
Kita boleh menghantar fungsi sebagai parameter fungsi tanpa nama dan memanggil fungsi dalam fungsi tanpa nama.
func greet(name string) { fmt.Printf("Hello, %s!\n", name) } // 继承 greet 函数,并在其基础上添加额外的功能 inheritedGreet := func(name string, numTimes int) { greet(name) for i := 0; i < numTimes-1; i++ { fmt.Printf("Hello again, %s!\n", name) } } // 调用继承的函数 inheritedGreet("Alice", 3)
Kes praktikal: Mewarisi io.Writer
Kita boleh menggunakan fungsi tanpa nama untuk mewarisi antara muka io.Writer
untuk mencipta fungsi pengelogan tersuai.
// 自定义 Writer,它会在写入数据之前为每一行添加时间戳 type TimestampedWriter struct { w io.Writer } // 继承 io.Writer.Write 方法 func (w *TimestampedWriter) Write(p []byte) (n int, err error) { // 调用 io.Writer.Write 方法,将其作为匿名函数的参数传递 n, err = w.w.Write(append([]byte(time.Now().Format("2006-01-02T15:04:05")), p...)) return } // 创建一个自定义 Writer writer := TimestampedWriter{w: os.Stdout} // 使用自定义 Writer fmt.Fprintln(writer, "Hello, world!")
Dengan menggunakan fungsi tanpa nama, kami boleh mensimulasikan pewarisan fungsi dengan mudah dalam Go dan mencipta fungsi tersuai yang berkuasa.
Atas ialah kandungan terperinci Bagaimana untuk mewarisi fungsi golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!