Berikut ialah pautan kepada video saya bercakap tentang topik ini
Jika anda tidak menyukai video, berikut ialah versi panjang lebar.
Perisian
Perisian boleh ditukar. Inilah sebabnya ia dipanggil "perisian". Keplastikannya lebih kuat daripada perkakasan. Pasukan jurutera yang hebat harus menjadi aset yang menakjubkan kepada syarikat, menulis sistem yang terus menambah nilai apabila perniagaan berkembang.
Jadi mengapa kita begitu teruk dalam hal ini? Berapa banyak projek yang pernah anda dengar tentang yang gagal sepenuhnya? Atau ia menjadi "warisan" dan mesti ditulis semula sepenuhnya (penulisan semula biasanya gagal juga!)
Bagaimana sistem perisian "gagal"? Tidak bolehkah ia diubah suai sebelum betul? Ini janji kami!
Ramai orang memilih untuk membina sistem dalam Go kerana ia telah membuat banyak pilihan yang diharapkan orang akan menjadikannya lebih sah. [Cadangan berkaitan: Pergi tutorial video]
Berbanding dengan kerjaya Scala saya sebelum iniSaya menyifatkannya sebagai membuatkan anda mempunyai keinginan untuk menggantung diri , Go hanya mempunyai 25 kata kunci dan banyak sistem yang boleh dibina daripada perpustakaan standard dan beberapa perpustakaan kecil lain. Visinya ialah dengan Go anda boleh menulis kod dan melihatnya semula dalam masa 6 bulan dan ia masih akan masuk akal.
Alat untuk ujian, penanda aras, penghuraian semantik dan pemuatan adalah yang terbaik berbanding kebanyakan alternatif.
Perpustakaan standard yang hebat.
Gelung maklum balas yang ketat menjadikan kompilasi sangat pantas
Go mempunyai komitmen keserasian ke belakang. Nampaknya Go akan mendapat generik dan ciri lain pada masa hadapan, tetapi pereka bentuk telah berjanji bahawa walaupun kod Go yang anda tulis 5 tahun lalu masih akan dibina. Saya telah menghabiskan beberapa minggu menaik taraf projek saya daripada Scala 2.8 kepada 2.10.
Walaupun dengan semua sifat hebat ini, kami masih boleh membuat sistem yang tidak baik, jadi kami harus mengkaji semula kejuruteraan perisian yang lalu tanpa mengira sama ada bahasa yang anda gunakan bagus atau tidak dan memahaminya pelajaran yang dipelajari.
Pada tahun 1974, seorang jurutera perisian pintar bernama [Manny Lehman](https://en.wikipedia.org/wiki/Manny_Lehman...) menulis Dimuat turun Evolusi Perisian Lehman Undang-undang.
Undang-undang ini menerangkan keseimbangan antara kuasa yang memacu perkembangan baharu dan kuasa yang menghalang kemajuan.
Ini adalah kuasa yang perlu kita fahami jika kita tidak mahu sistem yang kita bangunkan menjadi warisan dan ditulis semula berulang kali.
Undang-undang perubahan berterusan
Sistem perisian yang digunakan dalam kehidupan sebenar mesti sentiasa berubah, jika tidak, ia akan dihapuskan oleh persekitaran umum
Jelas sekali, satu sistem mesti terus berubah, jika tidak, ia akan menjadi semakin tidak berguna, tetapi mengapa keadaan ini sering diabaikan? menghantar projek mengikut tarikh yang ditentukan, dan kemudian mereka meneruskan ke projek seterusnya. Sekiranya perisian itu "bertuah", sekurang-kurangnya ia akan diserahkan dalam beberapa bentuk kepada kumpulan orang lain untuk mengekalkannya, tetapi mereka pastinya tidak akan terus mengulanginya.
Orang ramai sering bimbang dengan memilih rangka kerja untuk membantu mereka "menyampaikan dengan cepat" daripada menumpukan pada ketekunan sistem.
Walaupun anda seorang jurutera perisian yang hebat, anda masih boleh menjadi mangsa kerana tidak memahami keperluan masa depan sistem anda. Apabila perniagaan anda berubah, kod hebat yang anda tulis mungkin tidak lagi berkaitan.
Lehman sangat berjaya pada tahun 1970-an kerana dia memberi kami satu lagi peraturan yang patut difikirkan.
Hukum peningkatan kerumitanApabila sistem berkembang, kerumitan sistem akan terus meningkat melainkan langkah diambil untuk mengurangkan peningkatan dalam sistem kerumitan.
Apa yang dia ingin katakan sekarang ialah: Kami tidak boleh membiarkan pasukan perisian menjadi kilang fungsi tulen, hanya dengan menumpukan lebih banyak fungsi pada perisian supaya sistem boleh terus berjalan untuk masa yang lama.
Apabila landskap pengetahuan kami berubah, kami
mestiterus mengurus kerumitan sistem kami.
RefactoringPembangunan perisian boleh mengekalkan keplastikan perisian dalam
banyakaspek, seperti:
- Keizinan Pembangun
- Secara amnya kod "baik". Fokus pada pemisahan kod yang munasabah, dsb.
- Keupayaan komunikasi
- Senibina
- Kebolehcerap
- Kebolehlaksanaan
- Ujian automatik
- Gelung tertutup
- Saya akan fokus pada pemfaktoran semula. Pandangan biasa yang didengar daripada pembangun pada hari pertama pengaturcaraan mereka ialah "kita perlu memfaktorkan semula ini".
Ayat ini berasal dari dan? Bagaimanakah pemfaktoran semula berbeza daripada menulis kod?
Saya tahu saya dan ramai lagi berfikir bahawa kami sedang memfaktorkan semula, tetapi kami silap.
Martin Fowler menerangkan cara orang membuat kesilapan
Walau bagaimanapun, "pemfaktoran semula" sering digunakan di tempat yang tidak sesuai. Jika seseorang membincangkan sistem yang tidak berfungsi selama beberapa hari semasa mereka memfaktorkan semula, anda boleh pastikan mereka tidak memfaktorkan semula.
Apa itu?
Pemfaktoran
Apabila anda belajar matematik di sekolah, anda mungkin belajar tentang pemfaktoran. Berikut ialah contoh pengiraan
yang sangat mudah 1/2 1/4
Untuk melakukan ini, faktorkan penyebut menjadi , menukar ungkapan menjadi
2/4 1/4
Anda boleh mengubahnya menjadi 3/4
.
Kita boleh belajar beberapa pengajaran penting daripada ini. Apabila kita menguraikan ungkapan , kita tidak mengubah maksud ungkapan . Kedua-duanya sama dengan 3/4
, tetapi tugas kami menjadi lebih mudah dengan menukar 1/2
kepada 2/4
; ia lebih sesuai dengan "domain" kami.
Apabila anda memfaktorkan semula kod anda, anda harus cuba mencari cara untuk menjadikan kod anda lebih mudah difahami sambil "memastikan" keperluan sistem semasa anda. Kuncinya ialah bahawa anda tidak seharusnya mengubah tingkah laku asal kod
Contoh daripada Go
Kaedah berikut menggunakan Salam language
name
func Hello(name, language string) string { if language == "es" { return "Hola, " + name } if language == "fr" { return "Bonjour, " + name } // 想象一下更多的语言 return "Hello, " + name }Rasa tidak selesa jika terdapat berpuluh-puluh
kenyataan, dan kita perlu berulang kali menggunakan if
khusus untuk mengiringi language
salam ,
. Jadi mari kita refactor kod. name
func Hello(name, language string) string { return fmt.Sprintf( "%s, %s", greeting(language), name, ) } var greetings = map[string]string { es: "Hola", fr: "Bonjour", //等等... } func greeting(language string) string { greeting, exists := greetings[language] if exists { return greeting } return "Hello" }Sebenarnya sifat refactoring ini tidak penting, yang penting kita tidak mengubah tingkah laku kod tersebut. Apabila memfaktorkan semula, anda boleh melakukan apa sahaja yang anda suka, menambah antara muka, jenis baharu, fungsi, kaedah, dsb. Satu-satunya peraturan ialah anda tidak boleh mengubah tingkah laku kod. Jangan tukar kefungsian semasa memfaktorkan semula kod Ini sangat penting. Jika anda menukar fungsi semasa pemfaktoran semula, anda sedang melakukan
dua perkara pada masa yang sama. Sebagai jurutera perisian, kita harus belajar untuk memisahkan sistem kepada fail/pakej/fungsi/dll yang berbeza kerana kita tahu bahawa cuba memahami sebahagian besar sesuatu adalah sukar.
Kita tidak seharusnya memikirkan banyak perkara sekaligus kerana itu akan membuatkan kita melakukan kesilapan. Saya telah menyaksikan banyak usaha pemfaktoran semula gagal kerana pembangun menggigit lebih daripada yang mereka boleh kunyah. Semasa saya memfaktorkan dengan pen dan kertas dalam kelas matematik, saya terpaksa menyemak secara manual sama ada saya telah menukar maksud ungkapan di kepala saya. Apabila kita memfaktorkan semula kod, terutamanya pada sistem kritikal, bagaimana kita tahu jika kita telah menukar fungsi Mereka yang memilih untuk tidak menulis ujian sering bergantung pada ujian manual. Melainkan ia adalah projek kecil, ini akan menjadi masa yang besar dan tidak kondusif untuk pengembangan sistem masa depan dalam jangka masa panjang.Untuk memfaktor semula dengan selamat, anda memerlukan ujian unit kerana ia menyediakan
- untuk memfaktorkan semula kod tanpa perlu risau tentang perubahan fungsi
- Membantu pembangun menulis dokumentasi tentang cara sistem harus dijalankan
- Maklum balas yang lebih pantas dan lebih dipercayai daripada ujian manual
seperti ini:Hello
func TestHello(t *testing.T) { got := Hello("Chris", es) want := "Hola, Chris" if got != want { t.Errorf("got %q want %q", got, want) } }Dalam baris arahan, kami boleh menjalankan
, dan anda boleh mendapatkan maklum balas segera tentang sama ada kerja pemfaktoran semula kami menjejaskan operasi program asal. Sebenarnya, lebih baik belajar menjalankan ujian dalam editor/IDE. go test
- Pemfaktoran semula kecil
- Jalankan ujian
- Ulang
Ujian unit sangat hebat, kenapa kadangkala ada rintangan untuk menulisnya?
Di satu pihak, ada mereka (seperti saya) yang mengatakan ujian unit adalah penting untuk kesihatan jangka panjang sistem anda kerana ia memastikan anda boleh meneruskan pemfaktoran semula dengan yakin. Sebaliknya, ada yang mengatakan bahawa ujian unit sebenarnyamenghalang pemfaktoran semula.
Tanya diri anda, berapa kerap anda perlu menukar ujian semasa pemfaktoran semula? Saya telah terlibat dalam banyak projek selama bertahun-tahun yang mempunyai liputan ujian yang sangat tinggi, tetapi jurutera enggan memfaktorkan semula kerana mereka fikir menukar ujian itu akan menyusahkan. Ini bertentangan dengan janji kami!Kenapa ni?
Andaikata anda diminta melukis segi empat sama, kami fikir cara terbaik ialah melekatkan dua segi tiga.
Dua segi tiga tegak membentuk segi empat sama
Kami menulis ujian unit di sekeliling segi empat sama untuk memastikan kedua-dua belah adalah sama dan kemudian kami menulis beberapa ujian di sekeliling segi tiga. Kami ingin memastikan segitiga kami diberikan dengan betul supaya kami menegaskan bahawa jumlah sudut ialah 180 darjah, kami melakukan dua ujian untuk menyemak, dsb. Liputan ujian adalah sangat penting dan menulis ujian ini sangat mudah, mengapa tidak
Beberapa minggu kemudian perubahan undang-undang melanda sistem kami dan pembangun baharu membuat beberapa perubahan. Dia kini berfikir bahawa adalah lebih baik untuk membuat segi empat sama daripada dua segi empat tepat daripada dua segi tiga.
Dua segi empat tepat membentuk segi empat sama
Dia mencuba pemfaktoran semula ini dan mendapat beberapa petunjuk daripada beberapa ujian yang gagal. Adakah dia benar-benar memecahkan fungsi penting kod itu? Dia kini mesti mendalami ujian segitiga ini dan cuba memahami apa sebenarnya yang berlaku di dalamnya.
Sebenarnya tidak penting bahawa segi empat sama terdiri daripada segi tiga, tetapi ujian kami tersilap meningkatkan kepentingan butiran pelaksanaan.
Kefungsian ujian dan bukannya butiran pelaksanaan
Apabila saya mendengar orang mengadu tentang ujian unit, biasanya kerana ujian berada pada tahap abstraksi yang salah. Mereka semua sedang menguji butiran pelaksanaan, memerhati kod rakan usaha sama mereka secara taksub dan membuat banyak ejekan.
Saya percaya masalah ini disebabkan oleh salah faham mereka terhadap ujian unit dan mengejar metrik (liputan ujian).
Jika saya bercakap tentang hanya menguji kefungsian, bukankah kita sepatutnya menulis ujian sistem/kotak hitam? Jenis ujian ini sememangnya mempunyai banyak nilai dalam mengesahkan perjalanan pengguna utama, tetapi ia selalunya mahal untuk ditulis dan lambat dijalankan. Atas sebab ini, mereka tidak begitu membantu untuk pemfaktoran semula kerana gelung maklum balas adalah perlahan. Tambahan pula, berbanding dengan ujian unit, ujian kotak hitam tidak banyak membantu dalam menyelesaikan masalah asas.
Jadi apakah tahap abstraksi yang betul?
Menulis ujian unit yang berkesan ialah perkara reka bentuk
Lupakan sebentar tentang ujian, lebih baik masukkan "unit" yang serba lengkap dan dipisahkan dalam sistem anda, Center mengenai konsep utama dalam bidang anda.
Saya suka menganggap unit ini sebagai bata LEGO ringkas dengan API konsisten yang boleh saya gabungkan dengan bata lain untuk membina sistem yang lebih besar. Di dalam API ini, mungkin terdapat banyak perkara (jenis, fungsi, dll.) yang bekerjasama untuk menjadikannya berfungsi mengikut keperluan.
Sebagai contoh, jika anda menggunakan Go untuk membangunkan sistem perbankan, anda harus mempunyai pakej "akaun". Ia akan menyediakan API yang tidak membocorkan butiran pelaksanaan dan mudah untuk disepadukan.
Jika unit anda mematuhi sifat ini, anda boleh menulis ujian unit terhadap API awam mereka. Secara takrifan ujian ini hanya boleh menguji kefungsian yang berguna. Dengan unit ini disediakan, kami bebas untuk memfaktorkan semula apabila perlu, dan ujian tidak akan menghalang kami dalam kebanyakan kes.
Adakah ujian unit ini
Ya. Ujian unit adalah untuk apa yang saya nyatakan sebagai "unit". Mereka tidak pernah hanya menyasarkan satu kelas/fungsi/apa sahaja.
Menggabungkan konsep ini
Kami telah pun membincangkan
Pemfaktoran Semula
Ujian unit
Reka bentuk unit
Apa yang dapat kita lihat ialah aspek reka bentuk perisian ini saling melengkapi antara satu sama lain.
Pemfaktoran semula
menyediakan isyarat untuk ujian unit kami. Jika kita perlu menyemak secara manual, maka kita memerlukan lebih banyak ujian. Jika ujian gagal, maka ujian kami berada pada tahap abstraksi yang salah (atau tidak mempunyai nilai dan harus dialih keluar)
membantu kami menangani kerumitan dalam dan antara unit.
Ujian unit
menyediakan perlindungan keselamatan untuk pemfaktoran semula.
Sahkan dan dokumenkan kefungsian unit kami.
Unit (Reka bentuk yang baik)
Ujian unit bermakna yang mudah ditulis.
Mudah difaktorkan semula.
Adakah terdapat proses yang membantu kami terus memfaktorkan semula kod kami untuk mengurus kerumitan dan memastikan sistem berskala?
Mengapa Pembangunan pandu uji (TDD)
Sesetengah orang mungkin terlalu mereka bentuk dan membuang banyak masa mencuba untuk mencipta sistem berskala "sempurna" terlebih dahulu kerana idea Lehman tentang cara membuat perisian sentiasa berubah, Tetapi tiada apa yang dicapai .
Pada zaman dahulu perisian yang buruk, satu pasukan penganalisis akan menghabiskan 6 bulan menulis dokumen keperluan, satu pasukan arkitek akan menghabiskan 6 bulan mereka bentuk, dan beberapa tahun kemudian keseluruhan projek akan gagal.
Saya katakan zaman dahulu adalah buruk, tetapi masih begitu
Pembangunan tangkas mengajar kita bahawa kita perlu bekerja secara berulang, bermula dari kecil dan terus menambah baik perisian supaya kita boleh mendapatkan maklum balas dengan cepat mengenai reka bentuk perisian dan cara ia berfungsi dengan pengguna sebenar TDD menguatkuasakan pendekatan ini.
TDD menangani undang-undang yang dibincangkan oleh Lehman dan pelajaran sejarah lain yang sukar dipelajari dengan menggalakkan pendekatan pembangunan pemfaktoran semula dan penyampaian berulang yang berterusan.
Langkah kecil
Tulis ujian kecil untuk fungsi kecil
Periksa sama ada ujian gagal, dan mempunyai ralat yang jelas (merah)
Tulis kod minimum untuk membuat ujian lulus (hijau)
Refactor
Ulang langkah di atas
Apabila anda menjadi lebih mahir, ini akan menjadi cara semula jadi untuk bekerja untuk anda, dan kecekapan kerja anda juga akan meningkat dan lebih tinggi
Anda mula berharap bahawa unit ujian kecil anda tidak mengambil masa terlalu lama untuk melengkapkan keseluruhan ujian, kerana jika anda melihat program anda sentiasa dalam keadaan bukan "hijau", itu bermakna anda mungkin mengalami sedikit masalah.
Dengan maklum balas ujian ini, anda boleh memastikan kestabilan beberapa fungsi aplikasi kecil dengan mudah.
Pengakhiran yang memuaskan
Kelebihan perisian ini ialah saya boleh mengubahnya mengikut keperluan. Dari masa ke masa, disebabkan beberapa sebab yang tidak dapat diramalkan, kebanyakan perisian perlu membuat perubahan yang sepadan mengikut keperluan tetapi jangan terlalu banyak bekerja dan terlalu reka bentuk pada mulanya, kerana masa depan terlalu sukar untuk diramalkan.
Jadi untuk memenuhi keperluan di atas, kami perlu memastikan perisian kami berskala. Jika tidak, keadaan akan menjadi sangat teruk apabila perisian kami perlu difaktorkan semula dan dinaik taraf.
Ujian unit yang baik boleh membantu anda memfaktorkan semula projek anda dengan cepat dan gembira.
Menulis ujian unit yang baik ialah masalah reka bentuk Anda mesti berfikir dengan teliti untuk menyusun kod anda supaya setiap ujian unit anda sama menariknya dengan menyusun blok Lego , berjaya menyelesaikan ujian daripada keseluruhan projek.
Pembangunan Dipacu Ujian (Pembangunan Dipacu Ujian TDD) boleh membantu dan menggesa anda untuk membangunkan perisian yang direka dengan baik secara berulang Menggunakannya sebagai sokongan teknikal akan memberi impak yang besar pada masa depan anda kerja.
Alamat asal: https://quii.gitbook.io/learn-go-with-tests/meta/why
Alamat terjemahan: https: //learnku.com/go/t/34095
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !
Atas ialah kandungan terperinci Mengapa ujian unit? Bagaimana untuk menjalankan ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。 换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。 闭包会随着函数的创建而被同时创建。

本篇文章带大家了解一下golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

在写 Go 的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,下面本篇就来聊聊 Go 自带的 HttpClient 的超时机制,希望对大家有所帮助。


Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).
