


Nilai vs. Penerima Penunjuk dalam Antara Muka Go: Bilakah Penetapan Antara Muka Gagal?
Nov 19, 2024 pm 03:02 PMMemahami 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() }
Antara muka penyambut mentakrifkan dua kaedah, hello dan selamat tinggal.
type tourGuide struct { name string }
Struktur TourGuide melaksanakan penyambut antara muka.
func (t tourGuide) hello() { fmt.Println("Hello", t.name) }
Kaedah hello mempunyai penerima nilai, yang membenarkan penggunaan kaedah langsung menggunakan pembolehubah jenis TourGuide.
func (t *tourGuide) goodbye() { fmt.Println("Goodbye", t.name) }
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
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
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dalam bahasa Go, memanggil kaedah struktur memerlukan terlebih dahulu menentukan struktur dan kaedah yang mengikat penerima, dan mengaksesnya menggunakan nombor titik. Selepas menentukan segi empat tepat struktur, kaedah boleh diisytiharkan melalui penerima nilai atau penerima penunjuk; 1. Gunakan penerima nilai seperti kawasan func (rrectangle) int dan terus memanggilnya melalui rect.area (); 2. Jika anda perlu mengubah suai struktur, gunakan penerima penunjuk seperti func (R*segi empat) setWidth (...), dan GO akan secara automatik mengendalikan penukaran penunjuk dan nilai; 3. Apabila membenamkan struktur, kaedah struktur tertanam akan diperbaiki, dan ia boleh dipanggil secara langsung melalui struktur luar; 4. Pergi tidak perlu memaksa menggunakan getter/setter,

TointegrategoLanggerviceswithexistingpythoninfrastructure, userestapisorgrpcforinter-serviceCommunication, membolehkangoandpythonappstointeractseamlythroughtroughtroughtroughtroughtroughtrotocols.1.usereSestaS (ViaframeworksLikeGineGinpyton)

Pakej Masa Go menyediakan fungsi untuk masa dan tempoh pemprosesan, termasuk mendapatkan masa semasa, tarikh pemformatan, mengira perbezaan masa, zon waktu pemprosesan, penjadualan dan operasi tidur. Untuk mendapatkan masa semasa, gunakan time.now () untuk mendapatkan struktur masa, dan anda boleh mengekstrak maklumat masa tertentu melalui tahun (), bulan (), hari () dan kaedah lain; Gunakan format ("2006-01-0215: 04: 05") untuk memformat rentetan masa; Apabila mengira perbezaan masa, gunakan sub () atau sejak () untuk mendapatkan objek tempoh, dan kemudian tukarnya ke dalam unit yang sepadan melalui saat (), minit (), dan jam ();

GolangoffersSuperiorperformance, NativeConCurrencyViagoroutine, andefficientResourceusage, makeitidealforhigh-traffic, rendah latencyapis;

Ingo, ifStatementSexeCuteCodeBasedOnconditions.1.BasicSTructureRaBlockifaconditionistrue, mis., Ifx> 10 {...}. 2.elseclaushan dlesfalseconditions, mis., else {...}. 3.elseifchainsmultipleConditions, mis., elseifx == 10 {...}. 4.VariableinitializationInsideif, l

Gohandlesconcurrencyusinggoroutinesandchannels.1.goroutinesarelightweightfunctionsmanagedbythegoruntime, enablingthousthandstorunconcurrentlywithminiminimalresourceuse.2.ChannelsprovidesafecommunicationbeteBeteRoutines, iNabingVeSandreneShip

Cara standard untuk melindungi kawasan kritikal di GO adalah dengan menggunakan kunci () dan membuka kunci () kaedah sync.mutex. 1. Mengisytiharkan mutex dan menggunakannya dengan data yang akan dilindungi; 2. Kunci panggilan () sebelum memasuki kawasan kritikal untuk memastikan hanya satu goroutine yang dapat mengakses sumber yang dikongsi bersama; 3. Gunakan deferunlock () untuk memastikan bahawa kunci sentiasa dikeluarkan untuk mengelakkan kebuntuan; 4. Cuba memendekkan operasi di kawasan kritikal untuk meningkatkan prestasi; 5. Untuk senario di mana lebih banyak bacaan dan kurang menulis, sync.rwmutex harus digunakan, membaca operasi melalui rlock ()/runlock (), dan menulis operasi melalui kunci ()/buka kunci () untuk meningkatkan kecekapan konvensional.

Gunakan pengendali bit untuk mengendalikan bit spesifik integer dalam bahasa GO, sesuai untuk memproses bit bendera, data asas, atau operasi pengoptimuman. 1. Gunakan & (bit-wise) untuk memeriksa sama ada bit tertentu ditetapkan; 2. Gunakan
