Π—Π°Ρ‰ΠΎ Go Design Π΅ лош Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈΡ‚Π΅ програмисти

ΠŸΡ€Π΅Π· послСднитС мСсСци ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… Go Π·Π° внСдрявания. Π”ΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° концСпцията (ΠΏΡ€ΠΈΠ±Π».: ΠΊΠΎΠ΄ Π·Π° тСстванС Π½Π° функционалността Π½Π° идСя) Π² свободното си Π²Ρ€Π΅ΠΌΠ΅, отчасти Π·Π° ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° самия Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. Π‘Π°ΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ са ΠΌΠ½ΠΎΠ³ΠΎ прости ΠΈ Π½Π΅ са Ρ†Π΅Π»Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ статия, Π½ΠΎ самото изТивяванС ΠΎΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Go заслуТава няколко Π΄ΡƒΠΌΠΈ Π·Π° Π½Π΅Π³ΠΎ. Go ΠΎΠ±Π΅Ρ‰Π°Π²Π° Π΄Π° бъдС (ΠΏΡ€ΠΈΠ±Π».: статия, написана ΠΏΡ€Π΅Π· 2015 Π³.) популярСн Π΅Π·ΠΈΠΊ Π·Π° сСриозСн ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄. Π•Π·ΠΈΠΊΡŠΡ‚ Π΅ създадСн ΠΎΡ‚ Google, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка, чСстно ΠΊΠ°Π·Π°Π½ΠΎ смятам, Ρ‡Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½ΡŠΡ‚ Π½Π° Π΅Π·ΠΈΠΊΠ° Go Π΅ лош Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈΡ‚Π΅ програмисти.

ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° слаби програмисти?

Go Π΅ ΠΌΠ½ΠΎΠ³ΠΎ лСсСн Π·Π° Π½Π°ΡƒΡ‡Π°Π²Π°Π½Π΅, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° лСсСн, Ρ‡Π΅ Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΌΠΈ ΠΎΡ‚Π½Π΅ Π΅Π΄Π½Π° Π²Π΅Ρ‡Π΅Ρ€, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ… Π΄Π° ΠΊΠΎΠ΄ΠΈΡ€Π°ΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ. ΠšΠ½ΠΈΠ³Π°Ρ‚Π°, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…, Π·Π° Π΄Π° Π½Π°ΡƒΡ‡Π° Π“ΠΎ, сС ΠΊΠ°Π·Π²Π° Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π² Go (ΠΏΡ€Π΅Π²ΠΎΠ΄), Ρ‚ΠΎΠΉ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ ΠΎΠ½Π»Π°ΠΉΠ½. ΠšΠ½ΠΈΠ³Π°Ρ‚Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° самия ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° Go, Π΅ лСсна Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, ΠΈΠΌΠ° Π΄ΠΎΠ±Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΊΠΎΠ΄ ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΎΠΊΠΎΠ»ΠΎ 150 страници, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π°Ρ‚ навСднъТ. Π’Π°Π·ΠΈ простота Π΅ освСТаваща Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, особСно Π² свят Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, пълСн с ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ слоТна тСхнология. Но Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ късно възниква ΠΌΠΈΡΡŠΠ»Ρ‚Π°: β€žΠΠ°ΠΈΡΡ‚ΠΈΠ½Π° Π»ΠΈ Π΅ Ρ‚Π°ΠΊΠ°?β€œ

Google Ρ‚Π²ΡŠΡ€Π΄ΠΈ, Ρ‡Π΅ простотата Π½Π° Go Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠ° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΈ Π΅Π·ΠΈΠΊΡŠΡ‚ Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ Π·Π° максимална производитСлност Π² Π³ΠΎΠ»Π΅ΠΌΠΈ Π΅ΠΊΠΈΠΏΠΈ, Π½ΠΎ Π°Π· сС съмнявам. Има Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ»ΠΈ липсват, ΠΈΠ»ΠΈ са Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈ. И всичко Ρ‚ΠΎΠ²Π° ΠΏΠΎΡ€Π°Π΄ΠΈ липса Π½Π° Π΄ΠΎΠ²Π΅Ρ€ΠΈΠ΅ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, с ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‡Π΅ Ρ‚Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° направят Π½ΠΈΡ‰ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. Π’ΠΎΠ²Π° ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π·Π° простота бСшС ΡΡŠΠ·Π½Π°Ρ‚Π΅Π»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈ Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ напълно Π·Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ мотивацията Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ…Π° Π΄Π° постигнат Π² Go.

Π’Π°ΠΊΠ° Ρ‡Π΅ Π·Π°Ρ‰ΠΎ бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° просто? Π•Ρ‚ΠΎ няколко Ρ†ΠΈΡ‚Π°Ρ‚Π° Π ΠΎΠ± Пайк (ΠΏΡ€ΠΈΠ±Π».: Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Go):

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚ΡƒΠΊ Π΅, Ρ‡Π΅ Π½Π°ΡˆΠΈΡ‚Π΅ програмисти (ΠΏΡ€ΠΈΠ±Π».: слуТитСли Π½Π° Google) Π½Π΅ са изслСдоватСли. Π’Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, са доста ΠΌΠ»Π°Π΄ΠΈ, ΠΈΠ΄Π²Π°Ρ‚ ΠΏΡ€ΠΈ нас слСд ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ са ΡƒΡ‡ΠΈΠ»ΠΈ Java, ΠΈΠ»ΠΈ C/C++, ΠΈΠ»ΠΈ Python. Π’Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ страхотСн Π΅Π·ΠΈΠΊ, Π½ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ искамС Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π΄ΠΎΠ±ΡŠΡ€ софтуСр. Π•Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ тСхният Π΅Π·ΠΈΠΊ трябва Π΄Π° бъдС лСсСн Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΡƒΡ‡Π΅Π½Π΅.
 
Π’ΠΎΠΉ трябва Π΄Π° Π΅ ΠΏΠΎΠ·Π½Π°Ρ‚, Π³Ρ€ΡƒΠ±ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° C. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΠΈΡ‚Π΅, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π² Google, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ ΠΊΠ°Ρ€ΠΈΠ΅Ρ€Π°Ρ‚Π° си Ρ€Π°Π½ΠΎ ΠΈ са Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΌΠ½ΠΎ с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ, ΠΏΠΎ-спСциално сСмСйството C. Π˜Π·ΠΈΡΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π·Π° Π±ΡŠΡ€Π·Π° производитСлност Π² Π½ΠΎΠ² Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π΅Π·ΠΈΠΊΡŠΡ‚ Π½Π΅ трябва Π΄Π° бъдС Ρ‚Π²ΡŠΡ€Π΄Π΅ Ρ€Π°Π΄ΠΈΠΊΠ°Π»Π΅Π½.

Какво? Π’Π°ΠΊΠ° Ρ‡Π΅ Π ΠΎΠ± Пайк Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π² Google Π½Π΅ са Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±Ρ€ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° са създали Π΅Π·ΠΈΠΊ Π·Π° ΠΈΠ΄ΠΈΠΎΡ‚ΠΈ (ΠΏΡ€ΠΈΠ±Π».: Π³Π»ΡƒΠΏΠ°Π²), Π·Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° направят Π½Π΅Ρ‰ΠΎ. Какъв Π°Ρ€ΠΎΠ³Π°Π½Ρ‚Π΅Π½ ΠΏΠΎΠ³Π»Π΅Π΄ към собствСнитС си ΠΊΠΎΠ»Π΅Π³ΠΈ? Π’ΠΈΠ½Π°Π³ΠΈ съм вярвал, Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Google са Ρ€ΡŠΡ‡Π½ΠΎ ΠΏΠΎΠ΄Π±Ρ€Π°Π½ΠΈ ΠΎΡ‚ Π½Π°ΠΉ-ΡƒΠΌΠ½ΠΈΡ‚Π΅ ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ Π½Π° ЗСмята. Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС справят с Π½Π΅Ρ‰ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ?

АртСфакти с ΠΏΡ€Π΅ΠΊΠΎΠΌΠ΅Ρ€Π½Π° простота

Π”Π° бъдСш прост Π΅ достойна Ρ†Π΅Π» във всСки Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π²Π°Ρˆ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡˆ Π½Π΅Ρ‰ΠΎ просто Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚Π΅ Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ (ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ Π΄Π° ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅) слоТни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, понякога Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ слоТСн инструмСнт. БлоТността ΠΈ слоТността Π½Π΅ са Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ характСристики Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, Π½ΠΎ ΠΈΠΌΠ° срСдно ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅Π·ΠΈΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° създадС Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΈ абстракции, ΠΊΠΎΠΈΡ‚ΠΎ са лСсни Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.

НС ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Ρ€Π°Π·ΠΈΡ‚Π΅Π»Π΅Π½

ΠŸΠΎΡ€Π°Π΄ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚Π° си към простотата, Π½Π° Go липсват конструкции, ΠΊΠΎΠΈΡ‚ΠΎ сС Π²ΡŠΠ·ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΊΠ°Ρ‚ΠΎ СстСствСни Π² Π΄Ρ€ΡƒΠ³ΠΈ Π΅Π·ΠΈΡ†ΠΈ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ Π΄ΠΎΠ±Ρ€Π° идСя Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, Π½ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ многословСн ΠΊΠΎΠ΄. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° - трябва Π΄Π° Π΅ лСсно Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ ΠΊΠΎΠ΄Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ…ΠΎΡ€Π°, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚Π΅Π·ΠΈ опростявания само врСдят Π½Π° чСтливостта. Π’ Go няма ΡΡŠΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡ: ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠ»ΠΈ Π½ΠΈΡ‰ΠΎ.

НапримСр ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, която Ρ‡Π΅Ρ‚Π΅ stdin ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° командния Ρ€Π΅Π΄, Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()
    flags := flag.Args()

    var text string
    var scanner *bufio.Scanner
    var err error

    if len(flags) > 0 {

        file, err := os.Open(flags[0])

        if err != nil {
            log.Fatal(err)
        }

        scanner = bufio.NewScanner(file)

    } else {
        scanner = bufio.NewScanner(os.Stdin)
    }

    for scanner.Scan() {
        text += scanner.Text()
    }

    err = scanner.Err()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΡΡŠΡ‰ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° бъдС възмоТно Π½Π°ΠΉ-ΠΎΠ±Ρ‰, ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° многословност Π½Π° Go ΠΏΡ€Π΅Ρ‡ΠΈ ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° прост ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ голямо количСство ΠΊΠΎΠ΄.

Π•Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡ‰ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² D:

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

И ΠΊΠΎΠΉ Π΅ ΠΏΠΎ-Ρ‡ΠΈΡ‚Π°Π² сСга? Π©Π΅ Π΄Π°ΠΌ гласа си Π½Π° D. НСговият ΠΊΠΎΠ΄ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‡Π΅Ρ‚Π»ΠΈΠ², Π·Π°Ρ‰ΠΎΡ‚ΠΎ описва дСйствията ΠΏΠΎ-ясно. D ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-слоТни ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ (ΠΏΡ€ΠΈΠ±Π».: ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π° функция ΠΈ Templates), ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с Go, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ няма Π½ΠΈΡ‰ΠΎ слоТно Π² Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ.

Адско ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° подобряванС Π½Π° Go Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎΠ½Π΅ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΡ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° всички Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. НапримСр, функция Π·Π° сумиранС Π½Π° списък ΠΎΡ‚ Ρ†Π΅Π»ΠΈ числа Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠΎ никакъв Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ освСн Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΈ поставянС Π½Π° Π½Π΅ΠΉΠ½Π°Ρ‚Π° основна функция Π·Π° всСки Ρ‚ΠΈΠΏ цяло число; няма Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½:

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int16Sum(list []int16) (uint64) {
    var result int16 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int8Sum(list []int8) (uint64) {
    var result int8 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list8  := []int8 {1, 2, 3, 4, 5}
    list16 := []int16{1, 2, 3, 4, 5}
    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int8Sum(list8))
    fmt.Println(int16Sum(list16))
    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

И Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΡ€ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ със Π·Π½Π°ΠΊ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ напълно Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π΄Π° Π½Π΅ сС повтарятС (DRY), Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-извСстнитС ΠΈ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½Π΅ Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ. Π—Π°Ρ‰ΠΎ Go ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°? Π’ΠΎΠ²Π° Π΅ уТасСн аспСкт Π½Π° Π΅Π·ΠΈΠΊΠ°.

Π‘ΡŠΡ‰ΠΈΡΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° D:

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

ΠŸΡ€ΠΎΡΡ‚ΠΎ, Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎ ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΎ към Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π°. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π°Ρ‚Π° Ρ‚ΡƒΠΊ функция Π΅ reduce Π·Π° Ρ‚ΠΈΠΏ шаблон ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚. Π”Π°, Ρ‚ΠΎΠ²Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΅ ΠΏΠΎ-слоТно ΠΎΡ‚ вСрсията Go, Π½ΠΎ Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΎΡ‚ ΡƒΠΌΠ½ΠΈΡ‚Π΅ програмисти. Кой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ ΠΏΠΎ-лСсСн Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ ΠΈ ΠΏΠΎ-лСсСн Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅?

БистСмСн байпас ΠΎΡ‚ прост Ρ‚ΠΈΠΏ

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌ, Ρ‡Π΅ програмиститС Π½Π° Go, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‡Π΅Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ²Π°, Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚ пяна Π½Π° устата ΠΈ Ρ‰Π΅ крСщят: β€žΠŸΡ€Π°Π²ΠΈΡˆ Π³ΠΎ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎ!β€œ Π•, ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ Π·Π° създаванС Π½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½Π° функция ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π½ΠΎ Ρ‚ΠΎΠΉ напълно Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° систСмата ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅!

Π Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π³Π»ΡƒΠΏΠ°Π²Π° корСкция Π½Π° Π΅Π·ΠΈΠΊΠ°, Π·Π° Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

package main

import "fmt"
import "reflect"

func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
    val := reflect.ValueOf(in)

    for i := 0; i < val.Len(); i++ {
        memo = fn(val.Index(i).Interface(), memo)
    }

    return memo
}

func main() {

    list := []int{1, 2, 3, 4, 5}

    result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
        return memo.(int) + val.(int)
    })

    fmt.Println(result)
}

Π’ΠΎΠ²Π° изпълнСниС Reduce Π΅ заимствано ΠΎΡ‚ статията Π˜Π΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Π΄ΡƒΠΌΠΈ Π² Go (ΠΏΡ€ΠΈΠ±Π».: НС ΠΌΠΎΠΆΠ°Ρ… Π΄Π° намСря ΠΏΡ€Π΅Π²ΠΎΠ΄Π°, Ρ‰Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌ, Π°ΠΊΠΎ ΠΏΠΎΠΌΠΎΠ³Π½Π΅Ρ‚Π΅ с Ρ‚ΠΎΠ²Π°). Π•, Π°ΠΊΠΎ Π΅ ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½, Π½Π΅ Π±ΠΈΡ… искал Π΄Π° видя Π½Π΅ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ИзползванС interface{} - фарс, Π° Π½Π° Π΅Π·ΠΈΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ само Π·Π° заобикалянС Π½Π° писанС. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€Π°Π·Π΅Π½ интСрфСйс ΠΈ всички Π²ΠΈΠ΄ΠΎΠ²Π΅ Π³ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚, позволявайки пълна свобода Π·Π° всСки. Π’ΠΎΠ·ΠΈ стил Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π΅ уТасно Π³Ρ€ΠΎΠ·Π΅Π½ ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ всичко. Акробатични ΠΏΠΎΠ΄Π²ΠΈΠ·ΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ изискват ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС. Π”ΠΎΡ€ΠΈ Π ΠΎΠ± Пайк Π½Π΅ харСсва Ρ…ΠΎΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ злоупотрСбяват с Ρ‚ΠΎΠ²Π°, ΠΊΠ°ΠΊΡ‚ΠΎ Ρ‚ΠΎΠΉ спомСна Π² Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄ΠΎΠΊΠ»Π°Π΄ΠΈΡ‚Π΅ си.

Π’ΠΎΠ²Π° Π΅ ΠΌΠΎΡ‰Π΅Π½ инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° с повишСно Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Врябва Π΄Π° сС избягва, освСн Π°ΠΊΠΎ Π½Π΅ Π΅ строго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Π‘ΠΈΡ… Π²Π·Π΅Π» D шаблони вмСсто Ρ‚Π΅Π·ΠΈ глупости. Как ΠΌΠΎΠΆΠ΅ някой Π΄Π° ΠΊΠ°ΠΆΠ΅ Ρ‚ΠΎΠ²Π° interface{} ΠΏΠΎ-Ρ‡Π΅Ρ‚Π»ΠΈΠ² ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ бСзопасСн Π·Π° писанС?

НСволитС Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° зависимоститС

Go ΠΈΠΌΠ° Π²Π³Ρ€Π°Π΄Π΅Π½Π° систСма Π·Π° зависимост, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° Π²ΡŠΡ€Ρ…Ρƒ популярни хостинг доставчици VCS. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ΄Π²Π°Ρ‚ с Go знаят Π·Π° Ρ‚Π΅Π·ΠΈ услуги ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° изтСглят, ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΈ инсталират ΠΊΠΎΠ΄ ΠΎΡ‚ тях с Π΅Π΄ΠΈΠ½ Π·Π°ΠΌΠ°Ρ…. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ страхотно, ΠΈΠΌΠ° основСн Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ с вСрсиитС! Π”Π°, вярно Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ изходния ΠΊΠΎΠ΄ ΠΎΡ‚ услуги ΠΊΠ°Ρ‚ΠΎ github ΠΈΠ»ΠΈ bitbucket с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Go tools, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС вСрсията. И ΠΏΠ°ΠΊ простотия Π·Π° смСтка Π½Π° полСзността. НС ΠΌΠΎΠ³Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π·Π°Π΄Π°Π΄Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ относно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π΅ΠΊΠΈΠΏΡŠΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Go създадС нишка във Ρ„ΠΎΡ€ΡƒΠΌΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‡Π΅Ρ€Ρ‚Π°Π²Π° ΠΊΠ°ΠΊ Ρ‰Π΅ заобиколят Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Вяхната ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠ° бСшС просто Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ цялото Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° си Π΅Π΄ΠΈΠ½ Π΄Π΅Π½ ΠΈ Π΄Π° Π³ΠΎ оставитС β€žΠΊΠ°ΠΊΡ‚ΠΎ Π΅β€œ. Какво, ΠΏΠΎ дяволитС, си мислят? ИмамС нСвСроятни систСми Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° вСрсиитС със страхотно ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° вСрсии, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Go ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Ρ‚ ΠΈ просто ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ изходния ΠΊΠΎΠ΄.

ΠšΡƒΠ»Ρ‚ΡƒΡ€Π΅Π½ Π±Π°Π³Π°ΠΆ ΠΎΡ‚ Xi

Π‘ΠΏΠΎΡ€Π΅Π΄ ΠΌΠ΅Π½ Go Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΎΡ‚ Ρ…ΠΎΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ C ΠΏΡ€Π΅Π· цСлия си ΠΆΠΈΠ²ΠΎΡ‚ ΠΈ ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ²Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ искат Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚ Π½Π΅Ρ‰ΠΎ Π½ΠΎΠ²ΠΎ. Π•Π·ΠΈΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС описан ΠΊΠ°Ρ‚ΠΎ C с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΊΠΎΠ»Π΅Π»Π° (ΠΎΡ€ΠΈΠ³.: Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΡŠΡ‡Π½ΠΈ ΠΊΠΎΠ»Π΅Π»Π°). Π’ Π½Π΅Π³ΠΎ няма Π½ΠΎΠ²ΠΈ ΠΈΠ΄Π΅ΠΈ, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°Ρ‚Π° Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ (ΠΊΠΎΠ΅Ρ‚ΠΎ, ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π΅ прСкрасно) ΠΈ Ρ‚ΠΎΠ²Π° Π΅ ΠΆΠ°Π»ΠΊΠΎ. Π˜ΠΌΠ°Ρ‚Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ Π½Π° Π΅Π΄Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌ, ΠΊΡƒΡ† Π΅Π·ΠΈΠΊ.

Π”Ρ€ΡƒΠ³ ΡΠΊΡŠΡ€Ρ†Π°Ρ‰ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅, Ρ‡Π΅ Go Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅Π½ Π΅Π·ΠΈΠΊ (ΠΊΠ°Ρ‚ΠΎ тихия уТас Π½Π° C). Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅Π½ стил, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π°Ρ€Ρ…Π°ΠΈΡ‡Π΅Π½ ΠΈ остарял. Π—Π½Π°ΠΌ, Ρ‡Π΅ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π΅ Π΅ ΡΡ€Π΅Π±ΡŠΡ€Π΅Π½ ΠΊΡƒΡ€ΡˆΡƒΠΌ, Π½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ чудСсно Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° абстрахирамС Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π² Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ Π΄Π° осигурим капсулиранС.

ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Π·Π° ваша собствСна ΠΏΠΎΠ»Π·Π°

Go Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ Π΄Π° бъдС прост ΠΈ успява Π² Ρ‚Π°Π·ΠΈ Ρ†Π΅Π». Написан Π΅ Π·Π° слаби програмисти, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ стар Π΅Π·ΠΈΠΊ ΠΊΠ°Ρ‚ΠΎ шаблон. Π’ΠΎΠΉ ΠΈΠ΄Π²Π° Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ с прости инструмСнти Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° прости Π½Π΅Ρ‰Π°. Π’ΠΎΠΉ Π΅ лСсСн Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ лСсСн Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅.

Π’ΠΎΠ²Π° Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ многословно, нСвпСчатляващо ΠΈ лошо Π·Π° ΡƒΠΌΠ½ΠΈΡ‚Π΅ програмисти.

Благодаря ΠœΠ΅Ρ€ΡΠΈΠ½Π²Π°Π»Π΄ Π·Π° Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€