Rumah > pembangunan bahagian belakang > Golang > Nilai vs. Penerima Penunjuk dalam Antara Muka Go: Bilakah Penetapan Antara Muka Gagal?

Nilai vs. Penerima Penunjuk dalam Antara Muka Go: Bilakah Penetapan Antara Muka Gagal?

Susan Sarandon
Lepaskan: 2024-11-19 15:02:02
asal
967 orang telah melayarinya

Value vs. Pointer Receivers in Go Interfaces: When Does Interface Assignment Fail?

Memahami Kaedah Struktur Go dan Pelaksanaan Antara Muka

Dalam Go, kaedah yang memenuhi antara muka boleh dikategorikan kepada dua jenis: kaedah dengan penerima nilai dan kaedah dengan penerima penunjuk. Apabila melaksanakan antara muka, walau bagaimanapun, kebolehuntukan nilai kepada antara muka berbeza daripada panggilan kaedah struct langsung.

Pertimbangkan coretan kod yang disediakan:

type greeter interface {
    hello()
    goodbye()
}
Salin selepas log masuk

Antara muka penyambut mentakrifkan dua kaedah, hello dan selamat tinggal.

type tourGuide struct {
    name string
}
Salin selepas log masuk

Struktur TourGuide melaksanakan penyambut antara muka.

func (t tourGuide) hello() {
    fmt.Println("Hello", t.name)
}
Salin selepas log masuk

Kaedah hello mempunyai penerima nilai, yang membenarkan penggunaan kaedah langsung menggunakan pembolehubah jenis TourGuide.

func (t *tourGuide) goodbye() {
    fmt.Println("Goodbye", t.name)
}
Salin selepas log masuk

Kaedah selamat tinggal, sebaliknya, mempunyai penerima penunjuk, yang memerlukan pembolehubah penunjuk untuk digunakan.

Sekarang, mari kita periksa antara muka pelaksanaan:

var g2 greeter = t2
g2.hello()   // Hello Smith
g2.goodbye() // Goodbye Smith
Salin selepas log masuk

Menetapkan pembolehubah penunjuk t2 jenis *tourGuide kepada nilai penerima penyambut jenis antara muka berjaya kerana penerima penuding membenarkan pemerolehan alamat nilai, yang kemudiannya digunakan sebagai penerima.

var g1 greeter = t1
Salin selepas log masuk

Walau bagaimanapun, memberikan pembolehubah bukan penuding t1 jenis tourGuide kepada nilai penerima sebanyak penyambut jenis antara muka gagal. Ini kerana kaedah dengan penerima penunjuk memerlukan penerima penunjuk dan nilai itu sendiri tidak boleh digunakan secara langsung sebagai penunjuk.

Untuk meringkaskan, kaedah dengan penerima nilai boleh digunakan menggunakan sama ada nilai atau penunjuk, manakala kaedah dengan penerima penunjuk hanya boleh digunakan menggunakan penunjuk. Apabila melaksanakan antara muka dengan kaedah yang mempunyai penerima penunjuk, adalah penting untuk menggunakan penunjuk sebagai jenis asas.

Atas ialah kandungan terperinci Nilai vs. Penerima Penunjuk dalam Antara Muka Go: Bilakah Penetapan Antara Muka Gagal?. 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