Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Melewati rujukan dan nilai dalam fungsi Pergi ke

Melewati rujukan dan nilai dalam fungsi Pergi ke

Feb 12, 2024 pm 11:21 PM

在 Go to 函数中通过引用和值传递

Dalam pembangunan PHP, fungsi Pergi ke ialah fungsi yang sangat biasa digunakan yang boleh digunakan untuk mengawal aliran program. Apabila menggunakan fungsi Pergi ke, kami mempunyai dua cara untuk menghantar parameter: dengan rujukan dan nilai. Apabila parameter diluluskan melalui rujukan, pengubahsuaian kepada parameter di dalam fungsi akan mempengaruhi nilai pembolehubah di luar fungsi. Apabila parameter diluluskan mengikut nilai, pengubahsuaian pada parameter di dalam fungsi tidak akan menjejaskan nilai pembolehubah di luar fungsi. Oleh itu, apabila menulis fungsi, kita perlu memilih kaedah pemindahan parameter yang sesuai mengikut keperluan sebenar untuk mencapai logik program yang diharapkan. Dalam artikel ini, saya akan memperkenalkan secara terperinci penggunaan dan perbezaan rujukan lulus dan nilai dalam fungsi Pergi ke untuk membantu pembaca lebih memahami dan menggunakan fungsi PHP yang penting ini.

Kandungan soalan

Saya agak keliru untuk meneruskan rujukan dan nilai dalam perjalanan.

Saya telah melihat penjelasan untuk * di hadapan jenis.

* in front of a type name, means that the declared variable will store an address of another variable of that type (not a value of that
type).
Salin selepas log masuk

Ini tidak masuk akal bagi saya.

Di java, jika saya menghantar contoh pangkalan data kepada fungsi, saya melakukan ini

databasefunction(databasetype db) {
      // do something
}
Salin selepas log masuk

Tetapi dalam contoh go, saya telah lulus seperti ini.

func puttasks(db *sql.db) echo.handlerfunc {

}
Salin selepas log masuk

Mengapa kita memerlukan asterisk di hadapan jenis?

Berdasarkan helaian tipu ini, saya dapati.

func PrintPerson(p *Person)   ONLY receives the pointer address
(reference)
Salin selepas log masuk

Saya tidak faham mengapa saya hanya mahu menghantar alamat penunjuk sebagai parameter.

Penyelesaian

Pertama sekali, pergi secara teknikal hanya mempunyai nilai lulus. Apabila anda menghantar penunjuk kepada objek, anda menghantar penunjuk mengikut nilai, bukan objek dengan rujukan. Perbezaannya adalah halus, tetapi kadangkala relevan. Sebagai contoh, daripada membatalkan rujukannya dan menulis ganti memori yang ditunjukkannya, anda boleh menulis ganti nilai penuding yang tidak mempunyai kesan pada pemanggil.

// *int means you *must* pass a *int (pointer to int), NOT just an int!
func someFunc(x *int) {
    *x = 2 // Whatever variable caller passed in will now be 2
    y := 7
    x = &y // has no impact on the caller because we overwrote the pointer value!
}
Salin selepas log masuk

Berkenaan soalan anda "Mengapa kita memerlukan asterisk di hadapan jenis?": Asterisk bermaksud nilai itu menunjuk kepada nilai jenis sql.db 类型的指针,而不是 sql.db. Ini tidak boleh ditukar ganti!

Kenapa hantar alamat penunjuk? Dengan cara ini anda boleh berkongsi nilai antara pemanggil fungsi dan badan fungsi, dan mempunyai perubahan yang dibuat di dalam fungsi yang ditunjukkan dalam pemanggil (cth. penuding ialah satu-satunya cara kaedah "penetap" boleh bertindak pada objek) . Ini sebenarnya yang dilakukan oleh kod java anda juga; dalam java anda sentiasa mengakses objek melalui rujukan (penunjuk), jadi java melakukan ini secara automatik dan bukannya membenarkan anda menyatakannya secara eksplisit. Tetapi dalam perjalanan anda juga boleh mengakses objek melalui penunjuk, jadi anda perlu jelas. Jika anda memanggil fungsi dan menghantar objek secara terus, fungsi itu akan mendapat salinan objek, dan jika fungsi itu mengubah suai objek, pemanggil tidak akan melihat perubahan tersebut. Oleh itu, jika anda mahu perubahan disebarkan di luar fungsi, anda mesti lulus penunjuk. Dengan cara ini, penuding akan disalin, tetapi objek yang ditunjukkannya akan dikongsi.

Lihat juga:

Bahagian jelajah tentang penunjuk, Pergi bahagian spesifikasi tentang penunjuk, Pergi ke bahagian spesifikasi tentang pengendali alamat

Atas ialah kandungan terperinci Melewati rujukan dan nilai dalam fungsi Pergi ke. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Bagaimana anda menggunakan alat PPROF untuk menganalisis prestasi GO? Mar 21, 2025 pm 06:37 PM

Artikel ini menerangkan cara menggunakan alat PPROF untuk menganalisis prestasi GO, termasuk membolehkan profil, mengumpul data, dan mengenal pasti kesesakan biasa seperti CPU dan isu memori.

Bagaimana anda menulis ujian unit di GO? Bagaimana anda menulis ujian unit di GO? Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah arahan Go FMT dan mengapa ia penting? Apakah arahan Go FMT dan mengapa ia penting? Mar 20, 2025 pm 04:21 PM

Artikel ini membincangkan perintah Go FMT dalam pengaturcaraan GO, yang format kod untuk mematuhi garis panduan gaya rasmi. Ia menyoroti kepentingan GO FMT untuk mengekalkan konsistensi kod, kebolehbacaan, dan mengurangkan perdebatan gaya. Amalan terbaik untuk

Kaedah Pemantauan PostgreSQL di bawah Debian Kaedah Pemantauan PostgreSQL di bawah Debian Apr 02, 2025 am 07:27 AM

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

See all articles