Rumah pembangunan bahagian belakang Golang Langkah bayi dengan Go

Langkah bayi dengan Go

Aug 05, 2024 pm 07:28 PM

Baby steps with Go

Saya memutuskan untuk mencuba Go dalam perjalanan saya untuk memilih bahasa baharu yang berguna kepada kerjaya dan minat saya. Kali ini saya telah mencuba Go. Saya rasa apabila kesan pertama berlalu, ia cukup bagus.

Ini bukan lawatan berpandu, dan boleh dikatakan, tidak ditulis untuk orang lain selain diri saya, sebagai beberapa peringatan peribadi.

Saya memberi diri saya satu projek kecil untuk projek itu yang dipanggil Os-Release-Q . Hasrat saya adalah untuk dapat mempunyai binari pada mana-mana sistem yang saya uruskan, supaya saya boleh mencetak maklumat yang saya perlukan dengan tepat, tanpa perlu menghuraikan atau melihatnya.

Halangan pertama: import

Mencari di web banyak bercakap tentang mengimport pakej orang lain, tetapi sangat sedikit tentang mengatur kod sendiri. Malah dokumen memberi tumpuan kepada pergi dapatkan dan bukannya pemisahan kebimbangan.

Saya menghadapi sedikit halangan ini dalam setiap bahasa, kerana masing-masing mempunyai falsafah idiosinkratik sendiri tentang cara untuk mengatasinya, dan batasan yang ada atau dikenakan oleh masing-masing.

Daripada semua aktiviti yang saya lakukan dalam mempelajari asas-asas, datang daripada latar belakang yang kebanyakannya ular sawa, membahagikan kod saya kepada berbilang fail adalah perkara yang paling lama saya ambil untuk mendapatkan jawapan. Secara ringkasnya, saya dapati perkara berikut:

  • peringkat atas memerlukan go.mod yang mengisytiharkan nama modul modul
  • Saya kemudiannya boleh menetapkan direktori src/ di peringkat atas, dan src/main.go untuk meletakkan fungsi utama saya, dengan pengisytiharan utama pakej di bahagian atas
  • meletakkan kod dalam fail lain adalah mudah seperti mencipta fail seperti src/others.go dengan pengisytiharan utama pakej.
  • Semua fungsi dan pembolehubah tersedia terus dalam mana-mana fail lain pakej utama , tetapi fail tersebut perlu dinyatakan dengan jelas semasa dalam perjalanan membina panggilan FILES

Untuk submodul tempatan, submodul mesti berada dalam folder. Ia boleh mengisytiharkan nama submodule pakej .

Katakan ia berada dalam src/submod/, dengan pelaksana utama dalam src/submod/submod.go. Dalam main.go kami mengimport "nama modul/src/submod" (dengan nama modul ditarik dari go.mod). Dan kemudian kita boleh memanggil submod.SomeFunction().

Kami ambil perhatian bahawa fungsi submodul hanya tersedia untuk pengimport jika nama mereka bermula dengan huruf besar. Jadi jangan lakukan submod.myFunction() - ia mestilah submod.MyFunction().

Pasti terdapat pertimbangan lain mengenai submodul dan import, tetapi setakat memastikan kod teratur dan diasingkan, ini adalah perkara yang penting.

Untuk memastikan keadaan waras, saya tergoda untuk hanya mempunyai satu fail yang mengisytiharkan pakej utama dan mengasingkan selebihnya ke dalam submodul - ini diimport secara automatik tanpa perlu diisytiharkan dalam senarai fail FILES go build.

Melakukan tugas asas

Selepas saya menyelesaikan kekhususan Go ini, selebihnya jatuh ke tempat dengan mudah. Untuk setiap tugas asas sudah tentu terdapat entri StackOverflow, atau halaman GoByExample.com, dan lebih asas, rujukan bahasa Go.

  • Pengendalian rentetan dilakukan melalui pakej rentetan
  • Pengendalian tatasusunan mempunyai beberapa fungsi asli, di mana corak_susun_dasar = append(susun_asas, item1, item2) - ia juga berfungsi untuk memanjangkan tatasusunan dengan nilai-nilai yang lain melalui tambahan(asas, tatasusunan lain...)
  • Pengendalian ralat dilakukan dengan menyalurkan objek ralat biasanya, tetapi tidak semestinya.
  • lib "log" wujud untuk log no-faffing prakonfigurasi yang berguna. Ia termasuk log.Panggilan maut(mesej) yang merekodkan ralat, serta segera keluar.
  • Memanggil subproses adalah mudah melalui pustaka "os/exec", menggunakan corak exec.Command(base, args...)

Dua tugasan yang lazim layak mendapat perenggan mereka sendiri.

Ralat pengendalian

Pengendalian ralat asas sering diulas sebagai menyusahkan, benar-benar perlu menangani ralat di tengah-tengah aliran kawalan. Ini mungkin menjadi kutukan kepada pengaturcara yang datang daripada aliran kerja cuba/tangkap, tetapi mengendalikan isu pada titik di mana ia boleh berlaku tidaklah begitu teruk.

// explicit return item `err` forces us to be aware of it
// but having the ability to check it in the same breath is not so bad
if result, err := someCall(); err != nil {
    log.Fatal("Sorry.")
}

// Equally valid is
/*
result, err := someCall()
if err != nil {
    log.Fatal("Sorry")
}
*/

fmt.Println(result)
Salin selepas log masuk

Bandingkan cara cuba/tangkap

try:
    result = someCall()
    print(result)
except:
    print("Sorry") # a little divorced from potential origin of error
    sys.exit(1)

Salin selepas log masuk

Penghuraian Hujah

Saya tidak dapat tidak merasakan bahawa pelaksanaan perpustakaan bendera agak masak. Jelas sekali orang sudah terbiasa dan OK dengannya, memandangkan kelangsungan hidup dalam bentuk semasa.

Panggilan program -flag arg1 arg2 memberikan kita togol yang bendera ditetapkan untuk dilakukan, dan positionals := flags.Args() mengembalikan kepada kita tatasusunan ["arg1", "arg2"]

Walau bagaimanapun memanggil program arg1 arg2 -flag tidak bukan togol apa sahaja -flags sepatutnya lakukan, dan sebaliknya memberikan adalah positionals sebagai ["arg1", "arg2", "-flag"] di mana bendera tidak dihuraikan.

Ini mungkin berguna untuk menghantar dalam sub-panggilan seperti program colorize ls -l di mana ls -l diturunkan secara literal - supaya saya dapat melihat kes penggunaan.

Cuma kebanyakan program di luar sana membenarkan hujah bendera di mana-mana sahaja di sekitar item kedudukan. ls dir1/ -l dir2/ adalah sama dengan ls -l dir1/ dir2/, dan ini ialah konvensyen yang berpegang pada sebahagian besar perintah Unix dan Linux.

Mungkin ini adalah sesuatu yang perlu dibiasakan - dan patut dipanggil.

Tujuan dan kes penggunaan Go

Paradigma import fail diketepikan, saya mendapati ia agak mudah untuk melaksanakan aplikasi asas saya. Sebarang kesalahan yang saya lakukan terasa agak jelas dan kesilapan itu bermakna. Rasanya saya hanya boleh fokus pada "menyiapkan sesuatu."

Daripada jumlah penggunaan saya yang sangat sedikit setakat ini, dan mengambil kira keperluan khusus saya, saya dapat melihat

  • mudah untuk bermula
  • binari tersusun, tiada pergantungan masa jalan
  • bahasa mudah dengan jenis ialah satu langkah daripada skrip shell
  • sokongan berbilang pemprosesan yang didakwa mudah

Saya fikir mempunyai jenis jarang dan bukannya objek dan warisan akan menjadi penghalang, tetapi setakat ini baik. Saya bertahan tanpa mereka dalam bahasa lain, jadi saya rasa apabila saya dapat mentakrifkan antara muka dan jenis, ia akan berasa seperti satu langkah daripada Lua dan bash. Saya harap.

Salah satu sebab saya ingin meneroka bahasa tersusun kepada bahasa asli adalah untuk dapat menghasilkan perduaan yang boleh dielakkan dengan mudah, tanpa perlu bergantung pada versi tertentu masa jalan yang hadir.

Seorang rakan sekerja baru-baru ini berjalan ke meja saya dengan kecewa, cuba menyelesaikan mendapatkan Java 17 ke imej asas Node lama yang berdasarkan Debian 10 . Sama ada dia perlu menaik taraf versi Node untuk mendapatkan imej asas yang lebih baharu, menggunakan imej asas Debian baharu dan memasang serta mengkonfigurasi Node secara manual, atau menjelajah internet untuk mendapatkan repo tersuai yang dihoskan oleh goodness-knows-who for a goodness-knows -jika-digodam Java 17 yang akan dijalankan pada Debian 10.

Alangkah lebih mudah jika perisian yang digunakan tidak mempunyai kebergantungan masa jalan yang bercanggah...

Dari sudut pandangan ops, satu keuntungan besar yang saya rasa akan saya rasai ialah: Saya boleh menulis kod dengan mudah, dan membina binari ELF untuk kemudian digunakan pada "sistem X sewenang-wenangnya" dan tidak perlu bersaing dengan memastikan versi masa jalan yang betul disediakan dan menguruskan kebergantungan yang bercanggah.

Saya pasti ada faedah lain, dan saya telah mendengar banyak perkara yang diperkatakan tentang kemudahan penggunaan multithreading dan multiprocessing dalam Go, dan saya berhasrat untuk menyiapkan projek mini untuk meneroka perkara itu sebagai langkah seterusnya - mungkin sesuatu yang mungkin mendengar input pada berbilang saluran, dan melaksanakan beberapa tugas asas sebagai tindak balas. Saya mempunyai kes penggunaan untuk itu dalam beberapa tugasan automasi ujian yang pernah saya lakukan sebelum ini, jadi ia tidak asing bagi saya pada ketika ini.

Atas ialah kandungan terperinci Langkah bayi dengan Go. 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

Video Face Swap

Video Face Swap

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

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu 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)

Topik panas

Tutorial Java
1672
14
Tutorial PHP
1277
29
Tutorial C#
1257
24
Golang vs Python: Prestasi dan Skala Golang vs Python: Prestasi dan Skala Apr 19, 2025 am 12:18 AM

Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang dan C: Konvensyen vs kelajuan mentah Golang dan C: Konvensyen vs kelajuan mentah Apr 21, 2025 am 12:16 AM

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Bermula dengan Go: Panduan Pemula Bermula dengan Go: Panduan Pemula Apr 26, 2025 am 12:21 AM

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Golang vs C: Perbandingan Prestasi dan Kelajuan Golang vs C: Perbandingan Prestasi dan Kelajuan Apr 21, 2025 am 12:13 AM

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Golang vs Python: Perbezaan dan Persamaan Utama Golang vs Python: Perbezaan dan Persamaan Utama Apr 17, 2025 am 12:15 AM

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Golang dan C: Perdagangan dalam prestasi Golang dan C: Perdagangan dalam prestasi Apr 17, 2025 am 12:18 AM

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.

Perlumbaan Prestasi: Golang vs C Perlumbaan Prestasi: Golang vs C Apr 16, 2025 am 12:07 AM

Golang dan C masing-masing mempunyai kelebihan sendiri dalam pertandingan prestasi: 1) Golang sesuai untuk kesesuaian tinggi dan perkembangan pesat, dan 2) C menyediakan prestasi yang lebih tinggi dan kawalan halus. Pemilihan harus berdasarkan keperluan projek dan tumpukan teknologi pasukan.

Golang vs Python: Kebaikan dan Kekejangan Golang vs Python: Kebaikan dan Kekejangan Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,

See all articles