Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?
Penunjuk Go: Penerima dan Jenis Nilai
Dalam Go, penunjuk amat diperlukan untuk memahami pengaturcaraan dan pengurusan memori berorientasikan objek. Apabila berurusan dengan penunjuk, adalah penting untuk memahami perbezaan antara jenis penerima dalam kaedah.
Contoh Go Tour yang anda berikan menggambarkan konsep ini:
type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) }
Di sini, kaedah Abs menerima penunjuk penerima (*Puncak). Walau bagaimanapun, anda menyedari bahawa anda juga boleh menggunakan penerima nilai (Vertex) dan memperoleh hasil yang sama. Bagaimanakah ini boleh berlaku?
Jenis Penerima dan Nilai
Go membenarkan kaedah terbitan. Kaedah dengan penerima penunjuk boleh mewarisi daripada kaedah dengan penerima nilai. Ini bermakna kaedah penerima nilai, cth., func (v Vertex) Abs() float64, secara automatik menjana kaedah penerima penunjuk:
func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) } func (v *Vertex) Abs() float64 { return Vertex.Abs(*v) } // GENERATED METHOD
Pengambilan Alamat Automatik
Satu lagi ciri penting ialah pengambilan alamat automatik Go. Pertimbangkan kod berikut tanpa penerima penunjuk yang jelas:
func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) } func main() { v := Vertex{3, 4} v.Abs() }
Go secara tersirat mengambil alamat nilai yang dihantar kepada kaedah Abs. Ini bersamaan dengan yang berikut:
vp := &v vp.Abs()
Kesimpulan
Dalam Go, memahami peranan jenis penerima dan ciri pengambilan alamat automatik adalah penting untuk penggunaan penunjuk yang cekap . Anda boleh memperoleh kaedah penerima penuding daripada kaedah penerima nilai dan Go akan menghantar alamat nilai secara automatik tanpa menggunakan penunjuk secara eksplisit.
Atas ialah kandungan terperinci Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!