Rumah > Artikel > pembangunan bahagian belakang > Apakah ciri paling penting dalam bahasa go
Ciri yang paling penting dalam bahasa Go ialah: 1. Pengaturcaraan serentak dalam sintaks Go adalah sangat mudah, tidak perlu berurusan dengan panggilan balik, tidak perlu memberi perhatian kepada penukaran benang, hanya satu; kata kunci, mudah dan semula jadi. 2. Pengumpulan sampah automatik; pengaturcara tidak lagi perlu mempertimbangkan kitar semula memori, tetapi ciri bahasa menyediakan pengumpul sampah untuk menuntut semula ingatan. 3. Jenis terbina dalam yang lebih kaya. 4. Berbilang nilai pulangan fungsi. 5. Ralat pengendalian. 6. Fungsi dan penutupan tanpa nama. 7. Jenis dan antara muka. 8. Refleksi membolehkan pembangun menganggap jenis itu sendiri sebagai jenis nilai kelas pertama. 9. Interaktiviti bahasa.
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Ciri yang paling penting dalam bahasa Go adalah seperti berikut:
Pengaturcaraan serentak
Pengumpulan sampah automatik
Jenis terbina dalam yang kaya
Nilai pulangan berbilang fungsi
Ralat pengendalian
Fungsi dan penutupan tanpa nama
Jenis dan antara muka
Refleksi
Interativiti bahasa
Pengaturcaraan serentak
Hari ini, concurrency Pengaturcaraan telah menjadi kemahiran asas untuk pengaturcara, dan banyak topik perbincangan yang berkaitan boleh dilihat dalam pelbagai komuniti teknikal. Dalam kes ini, bahasa Go telah melakukan sesuatu yang sangat berani, tidak seperti biasa, dan pada asasnya menjadikan semuanya serentak Ia menggunakan Goroutine untuk menjalankan segala-galanya semasa masa jalan, termasuk fungsi masuk utama.
Boleh dikatakan bahawa Goroutine ialah ciri paling ketara bagi Go. Ia menggunakan pendekatan seperti coroutine untuk mengendalikan unit serentak, tetapi juga melakukan pengoptimuman yang lebih mendalam pada tahap masa jalan. Ini menjadikan pengaturcaraan serentak secara sintaksis amat mudah. Tidak perlu berurusan dengan panggilan balik, tidak perlu memberi perhatian kepada penukaran benang, hanya satu kata kunci, mudah dan semula jadi.
Bahasa Go jauh lebih mudah daripada kebanyakan bahasadari segi pengaturcaraan serentak Ini adalah salah satu sorotan terbesarnya dan cip tawar-menawar yang penting untuknya memasuki senario konkurensi tinggi dan berprestasi tinggi dalam. masa hadapan.
Berbeza daripada berbilang proses atau berbilang benang tradisional, unit pelaksanaan serentak golang ialah coroutine yang dipanggil goroutine.
Disebabkan penggunaan kunci dalam senario data kongsi, ditambah dengan GC, prestasi konkurensinya kadangkala tidak sebagus model IO pemultipleksan tak segerak Oleh itu, berbanding kebanyakan bahasa, pengaturcaraan serentak golang adalah lebih mudah daripada serentak prestasi Lebih banyak nilai jualan.
Dalam era berbilang teras hari ini, kepentingan pengaturcaraan serentak adalah jelas. Sudah tentu, banyak bahasa menyokong pengaturcaraan berbilang benang dan berbilang proses, tetapi malangnya, melaksanakan dan mengawalnya tidak begitu mudah dan menyenangkan. Perbezaan dengan Golang ialah tahap bahasa menyokong konkurensi coroutine (goroutine) (coroutine juga dipanggil micro-threads, yang lebih ringan, lebih murah dan berprestasi lebih tinggi daripada threads Ia sangat mudah untuk dikendalikan kata kunci (go) Digunakan untuk memulakan coroutine, dan beribu-ribu coroutine boleh dimulakan pada mesin yang sama. Coroutine selalunya difahami sebagai utas ringan Satu utas boleh mengandungi berbilang coroutine dan timbunan yang dikongsi tidak berkongsi tindanan. Coroutine biasanya dijadualkan secara eksplisit oleh aplikasi, dan penukaran konteks tidak perlu turun ke lapisan kernel, yang jauh lebih cekap. Secara amnya tiada komunikasi segerak antara coroutine, tetapi terdapat dua jenis komunikasi antara coroutine dalam golang: 1) jenis memori dikongsi, yang menggunakan pembolehubah global + kunci mutex untuk mencapai perkongsian data 2) jenis penghantaran mesej, yang menggunakan Some yang unik; mekanisme saluran melakukan komunikasi tak segerak.
Membandingkan pelbagai threading JAVA dan pelaksanaan coroutine GO, ia jelas lebih langsung dan mudah. Inilah daya tarikan GO, menyelesaikan masalah dengan cara yang mudah dan cekap Kata kunci pergi mungkin merupakan simbol terpenting bahasa GO.
Konkurensi tinggi ialah kemuncak terbesar bahasa Golang
Kitar semula ingatan (GC)
Dari C hingga C++ , dari perspektif prestasi program, kedua-dua bahasa ini membenarkan pengaturcara mengurus memori sendiri, termasuk aplikasi memori dan pelepasan, dsb. Oleh kerana tiada mekanisme kutipan sampah, C/C++ berjalan dengan sangat pantas, tetapi dengan itu terdapat pertimbangan teliti pengaturcara terhadap penggunaan memori. Kerana walaupun sedikit kecuaian boleh menyebabkan "kebocoran memori" yang membazirkan sumber atau "penunjuk liar" yang menyebabkan ranap program Walaupun C++11 kemudiannya menggunakan konsep penunjuk pintar, pengaturcara masih perlu menggunakannya dengan berhati-hati. Kemudian, untuk meningkatkan kelajuan pembangunan program dan keteguhan program, bahasa peringkat tinggi seperti Java dan C# memperkenalkan mekanisme GC, iaitu pengaturcara tidak lagi perlu mempertimbangkan kitar semula memori, tetapi ciri bahasa menyediakan pengumpul sampah untuk mengitar semula ingatan. Tetapi yang berikut mungkin penurunan dalam kecekapan menjalankan program.
Proses GC ialah: mula-mula hentikan dunia, imbas semua objek untuk menentukan sama ada ia masih hidup, tandakan objek yang boleh dikitar semula dalam kawasan peta bit, kemudian segera mulakan dunia, sambung semula perkhidmatan, dan pada masa yang sama mulakan gorountine khas untuk menuntut semula memori Ia diletakkan dalam senarai percuma untuk digunakan semula dan tidak dikeluarkan secara fizikal. Pelepasan fizikal dilakukan secara berkala oleh urutan khusus.
Kesempitan GC ialah semua objek mesti diimbas setiap kali untuk menentukan keaktifan lebih banyak objek untuk dikumpulkan, semakin perlahan kelajuannya. Nilai empirikal ialah 1ms diperlukan untuk mengimbas 100,000 objek, jadi cuba gunakan penyelesaian dengan lebih sedikit objek Contohnya, kami mempertimbangkan senarai terpaut, peta, kepingan dan tatasusunan untuk penyimpanan pada masa yang sama peta ialah objek, dan slice atau array ialah objek, jadi slice atau array bagus untuk GC.
Prestasi GC mungkin terus dioptimumkan kerana versi sentiasa dikemas kini. Saya tidak menyiasat perkara ini dengan teliti. Terdapat pembangun HotSpot dalam pasukan, jadi mereka harus belajar daripada idea reka bentuk jvm gc, seperti kitar semula generasi. , safepoint, dsb.
Memori dikitar semula secara automatik dan pembangun tidak perlu lagi mengurus memori
Pemaju menumpukan pada pelaksanaan perniagaan, mengurangkan beban mental
Hanya baharu diperlukan untuk memperuntukkan memori, tidak perlu melepaskannya
Jenis terbina dalam yang lebih banyak
Kuncinya terletak pada jenis data biasa seperti peta dan hirisan terbina dalam dan disertakan secara lalai, jadi tidak perlu menambahkannya sendiri.
Fungsi dengan berbilang nilai pulangan
Dalam C, C++, termasuk beberapa bahasa peringkat tinggi lain, nilai pulangan berbilang fungsi tidak disokong. Tetapi fungsi ini sememangnya diperlukan, jadi dalam bahasa C, nilai pulangan biasanya ditakrifkan sebagai struktur, atau dikembalikan dalam bentuk rujukan parameter fungsi. Dalam bahasa Go, sebagai jenis bahasa baharu, matlamatnya adalah untuk meletakkannya sebagai bahasa yang berkuasa dan sudah tentu tidak boleh berputus asa memenuhi permintaan ini, jadi adalah perlu untuk menyokong berbilang nilai pulangan daripada fungsi.
Apabila mentakrifkan fungsi, anda boleh menambah (a, b, c) selepas parameter input, yang bermaksud akan ada 3 nilai pulangan a, b, c. Ciri ini tersedia dalam banyak bahasa, seperti python.
Ciri gula sintaksis ini mempunyai kepentingan praktikal Contohnya, kami sering memerlukan antara muka untuk mengembalikan tiga kali ganda (errno, errmsg, data dalam kebanyakan bahasa yang hanya membenarkan satu nilai pulangan, kami hanya boleh Put triple ke dalam peta atau tatasusunan dan mengembalikannya Penerima juga perlu menulis kod untuk memeriksa bahawa nilai pulangan mengandungi tiga kali ganda Jika nilai pulangan berbilang dibenarkan, ia akan dipaksa secara langsung pada tahap definisi fungsi kod Lebih ringkas dan selamat.
Interaktiviti bahasa
Interaktiviti bahasa merujuk kepada sama ada bahasa itu boleh berinteraksi dengan bahasa lain, seperti memanggil perpustakaan yang disusun dalam bahasa lain .
Kebanyakan modul C digunakan semula secara langsung dalam bahasa Go, di sini dipanggil Cgo membolehkan pembangun mencampur dan menulis kod bahasa C, dan kemudian alat Cgo boleh mengekstrak kod C bercampur ini dan menjana C fungsi tersebut. memanggil kod pembalut. Pembangun pada asasnya boleh mengabaikan sepenuhnya bagaimana sempadan antara bahasa Go dan bahasa C diseberangi.
golang boleh berinteraksi dengan program C, tetapi tidak dengan C++. Terdapat dua alternatif: 1) Pertama menyusun c++ ke dalam perpustakaan dinamik, dan kemudian memanggil sekeping kod c dari go Kod c secara dinamik memanggil perpustakaan dinamik melalui perpustakaan dlfcn (ingat untuk mengeksport LD_LIBRARY_PATH 2) Gunakan swig (). tidak pernah bermain dengannya)
Pengendalian pengecualian
golang tidak menyokong penyelesaian pengecualian berstruktur seperti cuba...tangkap kerana dirasakan ia akan meningkatkan jumlah kod dan akan disekat Penyalahgunaan, membuang pengecualian tidak kira betapa kecilnya. Kaedah pengendalian pengecualian yang dianjurkan oleh golang ialah:
Pengecualian biasa: penerima memulangkan objek ralat dan pemanggil menentukan objek ralat.
Pengecualian teruk: merujuk kepada panik yang terganggu (seperti pembahagian dengan 0), yang ditangkap dan diproses menggunakan mekanisme penangguhan...pulihkan...panik. Pengecualian serius biasanya secara automatik dilemparkan secara dalaman oleh golang, dan tidak memerlukan pengguna untuk melontarnya secara aktif, mengelakkan situasi di mana cuba...tangkap tradisional ditulis di mana-mana. Sudah tentu, pengguna juga boleh menggunakan panik('xxxx') untuk melontar secara aktif, tetapi ini akan merosot mekanisme ini menjadi mekanisme pengecualian berstruktur.
Refleksi
Bahasa Go menyediakan mekanisme untuk mengemas kini dan menyemak nilai pembolehubah, kaedah panggilan pembolehubah dan Pembolehubah menyokong operasi intrinsik, tetapi jenis khusus pembolehubah ini tidak diketahui pada masa penyusunan Mekanisme ini dipanggil refleksi. Refleksi juga membolehkan kita menganggap jenis itu sendiri sebagai jenis nilai kelas pertama.
Refleksi merujuk kepada keupayaan untuk mengakses dan mengubah suai atur cara itu sendiri semasa program dijalankan, pembolehubah ditukar kepada alamat memori, dan nama pembolehubah tidak akan ditulis kepada boleh laku. bahagian oleh pengkompil Program tidak boleh mendapatkan maklumatnya sendiri.
Bahasa yang menyokong pantulan boleh mengintegrasikan maklumat pantulan pembolehubah, seperti nama medan, maklumat jenis, maklumat struktur, dll., ke dalam fail boleh laku semasa penyusunan atur cara dan menyediakan antara muka untuk atur cara akses maklumat refleksi, supaya maklumat Refleksi tentang jenis boleh diperolehi semasa masa jalan program dan mempunyai keupayaan untuk mengubah suainya.
Bahasa C/C++ tidak menyokong fungsi pantulan dan hanya boleh memberikan maklumat jenis masa jalan program yang sangat lemah melalui bahasa taip seperti Java dan C# semuanya menyokong fungsi pantulan lengkap seperti Lua dan JavaScript, kerana mereka Sintaks itu sendiri membenarkan kod untuk mengakses nilai program itu sendiri dan menaip maklumat semasa runtime, jadi tiada sistem pantulan diperlukan.
Sistem refleksi program bahasa Go tidak boleh mendapatkan semua jenis maklumat dalam ruang fail boleh laku atau pakej Ia perlu menggunakan pokok sintaks (AST) leksikal, penghurai sintaks dan abstrak dalam pustaka standard untuk menganalisis kod sumber. . Maklumat ini diperoleh selepas melakukan imbasan.
[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]
Atas ialah kandungan terperinci Apakah ciri paling penting dalam bahasa go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!