cari

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)

Bandingkan cara cuba/tangkap

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

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
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
Golang vs Python: Konvensyen dan MultithreadingGolang vs Python: Konvensyen dan MultithreadingApr 17, 2025 am 12:20 AM

Golang lebih sesuai untuk tugas -tugas kesesuaian yang tinggi, sementara Python mempunyai lebih banyak kelebihan dalam fleksibiliti. 1.Golang dengan cekap mengendalikan kesesuaian melalui goroutine dan saluran. 2. Pilihannya harus berdasarkan keperluan khusus.

Golang dan C: Perdagangan dalam prestasiGolang dan C: Perdagangan dalam prestasiApr 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.

Golang vs Python: Aplikasi dan Kes GunakanGolang vs Python: Aplikasi dan Kes GunakanApr 17, 2025 am 12:17 AM

PilihgolangforhighperformanceandConcurrency, IdealForBackEndServicesandnetworkprogramming; SelectPythonForrapidDevelopment, datascience, danMachinelearningDuetoitSversativilityAndextiveLibraries.

Golang vs Python: Perbezaan dan Persamaan UtamaGolang vs Python: Perbezaan dan Persamaan UtamaApr 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 vs Python: Kemudahan Penggunaan dan Keluk PembelajaranGolang vs Python: Kemudahan Penggunaan dan Keluk PembelajaranApr 17, 2025 am 12:12 AM

Dalam apa aspek Golang dan Python lebih mudah digunakan dan mempunyai lengkung pembelajaran yang lebih lancar? Golang lebih sesuai untuk kesesuaian tinggi dan keperluan prestasi tinggi, dan lengkung pembelajaran agak lembut untuk pemaju dengan latar belakang bahasa C. Python lebih sesuai untuk sains data dan prototaip cepat, dan lengkung pembelajaran sangat lancar untuk pemula.

Perlumbaan Prestasi: Golang vs CPerlumbaan Prestasi: Golang vs CApr 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 C: Contoh kod dan analisis prestasiGolang vs C: Contoh kod dan analisis prestasiApr 15, 2025 am 12:03 AM

Golang sesuai untuk pembangunan pesat dan pengaturcaraan serentak, manakala C lebih sesuai untuk projek yang memerlukan prestasi yang melampau dan kawalan asas. 1) Model Concurrency Golang memudahkan pengaturcaraan konvensyen melalui goroutine dan saluran. 2) Pengaturcaraan templat C menyediakan kod generik dan pengoptimuman prestasi. 3) Koleksi sampah Golang adalah mudah tetapi boleh menjejaskan prestasi. Pengurusan memori C adalah rumit tetapi kawalannya baik -baik saja.

Impak Golang: Kelajuan, Kecekapan, dan KesederhanaanImpak Golang: Kelajuan, Kecekapan, dan KesederhanaanApr 14, 2025 am 12:11 AM

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

See all articles

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 laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.