ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΈΠ·Π°ΠΉΠ½ Go ΠΏΠ»ΠΎΡ… для ΡƒΠΌΠ½Ρ‹Ρ… программистов

На протяТСнии послСдних мСсяцСв я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Go для ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΉ Proof of Concept (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: ΠΊΠΎΠ΄ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности ΠΈΠ΄Π΅ΠΈ) Π² свободноС врСмя, отчасти для изучСния самого языка программирования. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сами ΠΏΠΎ сСбС ΠΎΡ‡Π΅Π½ΡŒ просты ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ†Π΅Π»ΡŒΡŽ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½ΠΎ сам ΠΎΠΏΡ‹Ρ‚ использования Go заслуТиваСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΌ ΠΏΠ°Ρ€Ρƒ слов. Go ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: ΡΡ‚Π°Ρ‚ΡŒΡ написана Π² 2015) массовым языком для ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π―Π·Ρ‹ΠΊ создан Π² Google, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. ПодвСдя Ρ‡Π΅Ρ€Ρ‚Ρƒ, я искрСннС ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½ языка Go ΠΏΠ»ΠΎΡ… для ΡƒΠΌΠ½Ρ‹Ρ… программистов.

Π‘ΠΎΠ·Π΄Π°Π½ для слабых программистов?

Go ΠΎΡ‡Π΅Π½ΡŒ просто Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ просто, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ заняло Ρƒ мСня ΠΎΠ΄ΠΈΠ½ Π²Π΅Ρ‡Π΅Ρ€, послС Ρ‡Π΅Π³ΠΎ ΡƒΠΆΠ΅ ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Книга ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΠΈΠ·ΡƒΡ‡Π°Π» Go называСтся An Introduction to Programming in Go (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄), ΠΎΠ½Π° доступна Π² сСти. ΠšΠ½ΠΈΠ³Ρƒ, ΠΊΠ°ΠΊ ΠΈ сам исходный ΠΊΠΎΠ΄ Π½Π° Go, Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π² Π½Π΅ΠΉ Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, ΠΎΠ½Π° содСрТит порядка 150 страниц, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π·Π° Ρ€Π°Π·. Π‘Π½Π°Ρ‡Π°Π»Π° эта простота дСйствуСт ΠΎΡΠ²Π΅ΠΆΠ°ΡŽΡ‰Π΅, особСнно Π² ΠΌΠΈΡ€Π΅ программирования, ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ пСрСуслоТнСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Но Π² ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΌΡ‹ΡΠ»ΡŒ: «Π’Π°ΠΊ Π»ΠΈ это Π½Π° самом Π΄Π΅Π»Π΅?»

Google ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ простота Go β€” это ΠΏΠΎΠ΄ΠΊΡƒΠΏΠ°ΡŽΡ‰Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π°, ΠΈ язык ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для максимальной продуктивности Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…, Π½ΠΎ я сомнСваюсь Π² этом. Π•ΡΡ‚ΡŒ Ρ„ΠΈΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»ΠΈΠ±ΠΎ нСдостаСт, Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹. А всС ΠΈΠ·-Π·Π° отсутствия довСрия ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, с ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π² состоянии ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ стрСмлСниС ΠΊ простотС Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² языка ΠΈ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ½ΡΡ‚ΡŒ для Ρ‡Π΅Π³ΠΎ это Π±Ρ‹Π»ΠΎ Π½ΡƒΠΆΠ½ΠΎ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ добивались Π² Go.

Π’Π°ΠΊ для Ρ‡Π΅Π³ΠΎ ΠΆΠ΅ ΠΎΠ½ Π±Ρ‹Π» создан Ρ‚Π°ΠΊΠΈΠΌ простым? Π’ΠΎΡ‚ ΠΏΠ°Ρ€Π° Ρ†ΠΈΡ‚Π°Ρ‚ Π ΠΎΠ±Π° Пайка (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: ΠΎΠ΄ΠΈΠ½ ΠΈΠ· соавторов языка Go):

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ здСсь, Ρ‡Ρ‚ΠΎ наши программисты (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: Π³ΡƒΠ³Π»Π΅Ρ€Ρ‹) Π½Π΅ исслСдоватСли. Они, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, вСсьма ΠΌΠΎΠ»ΠΎΠ΄Ρ‹, ΠΈΠ΄ΡƒΡ‚ ΠΊ Π½Π°ΠΌ послС ΡƒΡ‡Π΅Π±Ρ‹, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ Java, ΠΈΠ»ΠΈ C/C++, ΠΈΠ»ΠΈ Python. Они Π½Π΅ Π² состоянии ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ язык, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ создавали Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ПО. ИмСнно поэтому ΠΈΡ… язык Π΄ΠΎΠ»ΠΆΠ΅Π½ прост ΠΈΠΌ для понимания ΠΈ изучСния.
Β 
Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ, Π³Ρ€ΡƒΠ±ΠΎ говоря ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Π‘ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π² Google Ρ€Π°Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ свою ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своСм Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌΠΈ языками, Π² частности сСмСйства Π‘ΠΈ. Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π² скорой продуктивности Π½Π° Π½ΠΎΠ²ΠΎΠΌ языкС программирования ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ язык Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ слишком Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

Π§Ρ‚ΠΎ? Π’Π°ΠΊ Π ΠΎΠ± Пайк Π² сущности Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π² Google Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΎΠ½ΠΈ ΠΈ создали язык для ΠΈΠ΄ΠΈΠΎΡ‚ΠΎΠ² (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: dumbed down), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π² состоянии Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎ Π·Π° высокомСрный взгляд Π½Π° собствСнных ΠΊΠΎΠ»Π»Π΅Π³? Π― всСгда считал, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 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 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΊΡƒΠ΄Π° слоТнСС (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹), Ρ‡Π΅ΠΌ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с 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 Π±Ρ‹Π»Π° позаимствована ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ Idiomatic generics in Go (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π΅ нашСл, Π±ΡƒΠ΄Ρƒ Ρ€Π°Π΄, Ссли ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚Π΅ с этим). Π§Ρ‚ΠΎ ΠΆΠ΅, Ссли это ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, я Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π΅ ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ИспользованиС interface{} β€” фарс, ΠΈ Π² языкС ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½ лишь для ΠΎΠ±Ρ…ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ пустой интСрфСйс ΠΈ всС Ρ‚ΠΈΠΏΡ‹ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚, позволяя ΠΏΠΎΠ»Π½ΡƒΡŽ свободу для всСх. Π­Ρ‚ΠΎΡ‚ ΡΡ‚ΠΈΠ»ΡŒ программирования Π΄ΠΎ уТаса Π±Π΅Π·ΠΎΠ±Ρ€Π°Π·Π΅Π½, ΠΈ это Π΅Ρ‰Π΅ Π½Π΅ всС. Для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… акробатичСских Ρ‚Ρ€ΡŽΠΊΠΎΠ² трСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Π”Π°ΠΆΠ΅ Π ΠΎΠ±Ρƒ ΠŸΠ°ΠΉΠΊΡƒ Π½Π΅ нравятся ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄Ρ‹, Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‰ΠΈΠ΅ этим, ΠΎ Ρ‡Π΅ΠΌ ΠΎΠ½ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· своих Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ².

Π­Ρ‚ΠΎ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ использован с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Π•Π³ΠΎ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ строгой нСобходимости.

Π― Π±Ρ‹ взял ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ D вмСсто этой Ρ‡Π΅ΠΏΡƒΡ…ΠΈ. Как ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ interface{} Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ типобСзопасСн?

Π“ΠΎΡ€Π΅ управлСния зависимостями

Π£ Go Π΅ΡΡ‚ΡŒ встроСнная систСма зависимостСй, построСнная ΠΏΠΎΠ²Π΅Ρ€Ρ… популярных хостингов VCS. ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅ΠΌΡ‹Π΅ с Go инструмСнты Π·Π½Π°ΡŽΡ‚ ΠΎΠ± этим сСрвисах ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ°Ρ…ΠΎΠΌ. Π₯отя это ΠΈ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Π΅ΡΡ‚ΡŒ крупная ΠΎΠΏΠ»ΠΎΡˆΠ½ΠΎΡΡ‚ΡŒ с вСрсионированиСм! Π”Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΈΠ· сСрвисов Π²Ρ€ΠΎΠ΄Π΅ github ΠΈΠ»ΠΈ bitbucket с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнтов Go, Π½ΠΎ нСльзя ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ. И снова простота Π² ΡƒΡ‰Π΅Ρ€Π± полСзности. Π― Π½Π΅ Π² состоянии ΠΏΠΎΠ½ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

ПослС вопросов ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Go создала Π²Π΅Ρ‚ΠΊΡƒ Ρ„ΠΎΡ€ΡƒΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ·Π»ΠΎΠΆΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ этот вопрос. Π˜Ρ… рСкомСндация Π±Ρ‹Π»Π° просто ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ сСбС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ «ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ». Какого Ρ‡Π΅Ρ€Ρ‚Π° ΠΎΠ½ΠΈ Π΄ΡƒΠΌΠ°ΡŽΡ‚? Π£ нас Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΠ΅ систСмы контроля вСрсий с ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ‚Π΅Π³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ вСрсий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создатСли Go ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ исходныС тСксты.

ΠšΡƒΠ»ΡŒΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Π±Π°Π³Π°ΠΆ ΠΈΠ· Π‘ΠΈ

По-ΠΌΠΎΠ΅ΠΌΡƒ мнСнию, Go Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ людьми, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовали Π‘ΠΈ всю свою Тизнь ΠΈ Ρ‚Π΅ΠΌΠΈ, ΠΊΡ‚ΠΎ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅. Π―Π·Ρ‹ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π‘ΠΈ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ колСсиками(ΠΎΡ€ΠΈΠ³.: training wheels). Π’ Π½Π΅ΠΌ Π½Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, кстати, прСкрасСн) ΠΈ это ΠΎΠ±ΠΈΠ΄Π½ΠΎ. Π£ вас Π΅ΡΡ‚ΡŒ отличная ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π΅Π΄Π²Π° Π»ΠΈ Π³ΠΎΠ΄Π½ΠΎΠΌ ΠΊ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΡŽ, Ρ…Ρ€ΠΎΠΌΠ°ΡŽΡ‰Π΅ΠΌ языкС.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° скрипучая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Go β€” это ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ язык (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΈΡ…ΠΎΠΌΡƒ уТасу Π‘ΠΈ). Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΡˆΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΌ стилС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ощущаСтся Π°Ρ€Ρ…Π°ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ. Π― знаю, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это Π½Π΅ сСрСбряная пуля, Π½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Π² Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ.

ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° для собствСнной Π²Ρ‹Π³ΠΎΠ΄Ρ‹

Go Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ простым ΠΈ ΠΎΠ½ прСуспСл Π² этой Ρ†Π΅Π»ΠΈ. Он Π±Ρ‹Π» написан для слабых программистов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² качСствС Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ старый язык. ΠŸΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ ΠΎΠ½ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с простыми инструмСнтами для выполнСния простых Π²Π΅Ρ‰Π΅ΠΉ. Π•Π³ΠΎ просто Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Он ΠΊΡ€Π°ΠΉΠ½Π΅ многословный, Π½Π΅Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΏΠ»ΠΎΡ… для ΡƒΠΌΠ½Ρ‹Ρ… программистов.

Бпасибо mersinvald Π·Π° ΠΏΡ€Π°Π²ΠΊΠΈ

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