Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?

Bagaimanakah Go Mengendalikan Penunjuk dan Penerima Nilai dalam Kaedah?

Barbara Streisand
Lepaskan: 2024-11-08 13:37:01
asal
271 orang telah melayarinya

How Does Go Handle Pointer and Value Receivers in Methods?

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())
}
Salin selepas log masuk

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
Salin selepas log masuk

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()
}
Salin selepas log masuk

Go secara tersirat mengambil alamat nilai yang dihantar kepada kaedah Abs. Ini bersamaan dengan yang berikut:

vp := &v
vp.Abs()
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan