ΠŸΠΎΡ‡Π΅ΠΌΡƒ язык Go ΠΏΠ»ΠΎΡ… для НЕумных программистов

Π‘Ρ‚Π°Ρ‚ΡŒΡ написана, ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π°Π½Π΅Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ-Π°Π½Ρ‚ΠΈΠΏΠΎΠ΄.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ язык Go ΠΏΠ»ΠΎΡ… для НЕумных программистов

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

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

Π‘Π»Π°Π±Ρ‹Π΅ говорят ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ…. Π‘ΠΈΠ»ΡŒΠ½Ρ‹Π΅ говорят ΠΎΠ± идСях ΠΈ мСчтах…

Go ΠΎΡ‡Π΅Π½ΡŒ просто Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ просто, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ практичСски Π±Π΅Π· ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π­Ρ‚Ρƒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΌΠΈΡ€ΠΎΠ²Ρ‹Ρ… компаниях, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ вмСстС с Π½Π΅ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ спСциалистами (ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ, Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚. Π΄.). Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΉ Ρ‚ΠΈΠΏΠ° Design Driven Development.
Π”Π°ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ спустя нСдСлю-Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Книга, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ я ΠΈΠ·ΡƒΡ‡Π°Π» β€œGo называСтся ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° языкС Go” (Π°Π²Ρ‚ΠΎΡ€ ΠœΠ°Ρ€ΠΊ Π‘Π°ΠΌΠΌΠ΅Ρ€Ρ„ΠΈΠ»Π΄). Книга вСсьма Ρ…ΠΎΡ€ΠΎΡˆΠ°, Π² Π½Π΅ΠΉ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½ΡŽΠ°Π½ΡΡ‹ языка. ПослС Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎ услоТнСнных языков Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Java, PHP, отсутствиС ΠΌΠ°Π³ΠΈΠΈ дСйствуСт ΠΎΡΠ²Π΅ΠΆΠ°ΡŽΡ‰Π΅. Но Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… программистов Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ старыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠΏΡ€ΠΈΡ‰Π΅. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ это Ρ‚Π°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ?

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

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

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

Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ, Π³Ρ€ΡƒΠ±ΠΎ говоря ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Π½Π° Π‘ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π² Google Ρ€Π°Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ свою ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своСм Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌΠΈ языками, Π² частности сСмСйства Π‘ΠΈ. Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π² скорой продуктивности Π½Π° Π½ΠΎΠ²ΠΎΠΌ языкС программирования ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ язык Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ слишком Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

ΠœΡƒΠ΄Ρ€Ρ‹Π΅ слова, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?

АртСфакты простоты

ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ условиС прСкрасного. Π›Π΅Π² Волстой.

Π‘Ρ‹Ρ‚ΡŒ простым β€” это ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… стрСмлСний Π² любом Π΄ΠΈΠ·Π°ΠΉΠ½Π΅. Как извСстно, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ это Π½Π΅ Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΡƒΠ΄Π° Π½Π΅Ρ‡Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Π° Ρ‚ΠΎΡ‚ – Π² ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‡Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ. МногиС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ) слоТныС Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ слоТный инструмСнт. Однако, это Π½Π΅ Ρ‚Π°ΠΊ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ язык PERL. ИдСологи языка считали, Ρ‡Ρ‚ΠΎ программист Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡƒΡ‚ΠΈ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. ИдСологи языка Go пошли Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ, ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ для достиТСния Ρ†Π΅Π»ΠΈ достаточно ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ, Π½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄ собой ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚: СдинствСнный ΠΏΡƒΡ‚ΡŒ Π»Π΅Π³Ρ‡Π΅ учится ΠΈ тяТСлСй забываСтся.

МногиС ΠΌΠΈΠ³Ρ€Π°Π½Ρ‚Ρ‹ ΠΆΠ°Π»ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ язык Π½Π΅ содСрТит элСгантных абстракций. Π”Π°, это Ρ‚Π°ΠΊ, ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… достоинств языка. Π―Π·Ρ‹ΠΊ содСрТит Π² своСм составС ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΌΠ°Π³ΠΈΠΈ – поэтому Π½Π΅ трСбуСтся Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ для чтСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π§Ρ‚ΠΎ ΠΆΠ΅ касаСтся многословности ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ это ΠΈ вовсС Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π₯ΠΎΡ€ΠΎΡˆΠΎ написанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° языкС Golang читаСтся ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ, практичСски Π±Π΅Π· структурирования. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ чтСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° порядок прСвосходит ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΅Π΅ написания. Если ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ встроСнной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ gofmt), Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ нСсколько Π»ΠΈΡˆΠ½ΠΈΡ… строк Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.

НС ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ

Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ Π½Π΅ Ρ‚Π΅Ρ€ΠΏΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° ΡΡ‚Π΅ΡΠ½ΡΡŽΡ‚ Π΅Π³ΠΎ свободу. Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΅Π³ΠΎ обязанности.

Из-Π·Π° стрСмлСния ΠΊ простотС Π² Go ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ конструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… языках Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ СстСствСнноС, ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΡˆΠΈΠΌ ΠΊ Π½ΠΈΠΌ людям. Π’Π½Π°Ρ‡Π°Π»Π΅ это ΠΌΠΎΠΆΠ΅Ρ‚ нСсколько Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅ΡˆΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° читаСтся Π² Ρ€Π°Π·Ρ‹ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Π΅ΠΉ.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, консольная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, которая Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ stdin Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ» ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

package main

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

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

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

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

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

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

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

    return bufio.NewScanner(file)
}

РСшСниС этой ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° языкС 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);
    }
}

Ад копирования

Π§Π΅Π»ΠΎΠ²Π΅ΠΊ носит Π°Π΄ Π² самом сСбС. ΠœΠ°Ρ€Ρ‚ΠΈΠ½ Π›ΡŽΡ‚Π΅Ρ€.

Новички постоянно ΠΆΠ°Π»ΡƒΡŽΡ‚ΡΡ Π½Π° 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 main() {

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

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

Π’ языкС ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ достаточныС срСдства для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… конструкций. НапримСр, Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

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

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

И, хотя Ρƒ нас ΠΊΠΎΠ΄ получился нСсколько Π΄Π»ΠΈΠ½Π΅Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ случая, Π·Π°Ρ‚ΠΎ ΠΎΠ½ стал ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС арифмСтичСскиС дСйствия.

МногиС скаТут, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° языкС D выглядит сущСствСнно ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π°Π²Ρ‹.

import std.stdio;
import std.algorithm;

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

Однако, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Π½ΠΎ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° D ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ игнорируСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок.

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ возрастаСт, Ρ€Π°Π·Ρ€Ρ‹Π² ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращаСтся. Π•Ρ‰Π΅ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Π΅ΠΉ Ρ€Π°Π·Ρ€Ρ‹Π² сокращаСтся, ΠΊΠΎΠ³Π΄Π° трСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ стандартных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² языка.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния поддСрТиваСмости, Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ, читаСмости, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡƒ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ язык Go, хотя ΠΈ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎ многословности.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² рядС случаСв Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π½Π΅ΠΎΡΠΏΠΎΡ€ΠΈΠΌΡƒΡŽ Π²Ρ‹Π³ΠΎΠ΄Ρƒ. Π­Ρ‚ΠΎ наглядно ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ sort. Π’Π°ΠΊ, для сортировки любого списка Π½Π°ΠΌ достаточно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс sort.Interface.

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

Если Π’Ρ‹ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚Π΅ любой open source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ grep «interface{}» -R, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Ρ‹Π΅ интСрфСйсы. НСдалСкиС Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰ΠΈ сразу ΠΆΠ΅ скаТут, Ρ‡Ρ‚ΠΎ всС это ΠΈΠ·-Π·Π° отсутствия Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Однако, это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ язык DELPHI. НСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ Π½Π΅Π³ΠΎ этих самых Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ², ΠΎΠ½ содСрТит ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ VARIANT для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Аналогично поступаСт ΠΈ язык Go.

Из ΠΏΡƒΡˆΠΊΠΈ ΠΏΠΎ Π²ΠΎΡ€ΠΎΠ±ΡŒΡΠΌ

И ΡΠΌΠΈΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€ΡƒΠ±Π°ΡˆΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ бСзумия. Бтанислав Π›Π΅Ρ†.

МногиС Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΠΈ экстрима ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Go Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для создания Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² β€” рСфлСксия. И ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π°Π²Ρ‹,… Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅Π΄ΠΊΠΈΡ… случаях.

Π ΠΎΠ± Пайк ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ нас:

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

ВикипСдия Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

РСфлСксия ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ процСсс, Π²ΠΎ врСмя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ структуру ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния. ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования, полоТСнная Π² основу отраТСния, называСтся рСфлСксивным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² мСтапрограммирования.

Однако, ΠΊΠ°ΠΊ извСстно, Π·Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это:

  • ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
  • ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ„Π»Π΅ΠΊΡΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠ°ΠΊ орудия большого ΠΊΠ°Π»ΠΈΠ±Ρ€Π°. Π‘Π΅Π·Π΄ΡƒΠΌΠ½ΠΎΠ΅ ΠΆΠ΅ использованиС рСфлСксии ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСчитаСмости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, постоянным ошибкам ΠΈ Π½ΠΈΠ·ΠΊΠΎΠΉ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹. Как Ρ€Π°Π· самоС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ программист-сноб смог Ρ‰Π΅Π³ΠΎΠ»ΡŒΠ½ΡƒΡ‚ΡŒ своим ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ скромными ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ.

ΠšΡƒΠ»ΡŒΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Π±Π°Π³Π°ΠΆ ΠΈΠ· Π‘ΠΈ? НСт, ΠΈΠ· ряда языков!

ВмСстС с состояниСм наслСдникам ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈ Π΄ΠΎΠ»Π³ΠΈ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ язык ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ основываСтся Π½Π° наслСдии Π‘ΠΈ β€” это Π½Π΅ Ρ‚Π°ΠΊ. Π―Π·Ρ‹ΠΊ Π²ΠΎΠ±Ρ€Π°Π» Π² сСбя ΠΌΠ½ΠΎΠ³ΠΈΠ΅ аспСкты Π»ΡƒΡ‡ΡˆΠΈΡ… языков программирования.

Бинтаксис

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, синтаксис грамматичСских конструкций основываСтся Π½Π° синтаксисС языка Π‘ΠΈ. Однако, сущСствСнноС влияниС ΠΎΠΊΠ°Π·Π°Π» ΠΈ язык DELPHI. Π’Π°ΠΊ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡƒΠ±Ρ€Π°Π½Ρ‹ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ скобки, Ρ‚Π°ΠΊ сильно ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰ΠΈΠ΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΆΠ΅ язык содСрТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ «:=», присущий языку DELPHI. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² заимствовано ΠΈΠ· языков, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ADA. ДСкларация Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… сущностСй заимствована ΠΈΠ· языка PROLOG.

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°

Π—Π° основу ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±Ρ‹Π»Π° взята сСмантика языка DELPHI. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ инкапсулируСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ΄ ΠΈ содСрТит ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ сущности. Π­Ρ‚ΠΎ позволяСт ΡΠΎΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ интСрфСйс ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ дСлСгирования Π±Ρ‹Π»Π° заимствована ΠΈΠ· языка DELPHI.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ

НСдаром Ρ…ΠΎΠ΄ΠΈΡ‚ ΡˆΡƒΡ‚ΠΊΠ°: Go Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, ΠΏΠΎΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π‘ΠΈ. Одной ΠΈΠ· ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон языка являСтся свСрхбыстрая компиляция. ИдСя Π±Ρ‹Π»Π° заимствована ΠΈΠ· языка DELPHI. ΠŸΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Go соотвСтствуСт ΠΌΠΎΠ΄ΡƒΠ»ΡŽ DELPHI. Π­Ρ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ нСобходимости. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ послС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π΅ трСбуСтся ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° достаточно ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, зависящиС ΠΎΡ‚ этих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (Π΄Π° ΠΈ Ρ‚ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС, Ссли измСнились интСрфСйсы ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²).

ВысокоуровнСвыС конструкции

Π―Π·Ρ‹ΠΊ содСрТит мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… высокоуровнСвых конструкций, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ связанных с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ языка Ρ‚ΠΈΠΏΠ° Π‘ΠΈ.

  • Π‘Ρ‚Ρ€ΠΎΠΊΠΈ
  • Π₯эш Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
  • Блайсы
  • Утиная типизация позаимствована ΠΈΠ· языков, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… RUBY (ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ, ΠΊ соТалСнию, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΌΠΎΡ‰ΡŒ).

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π²ΠΎΠΎΠ±Ρ‰Π΅ заслуТиваСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Если Π² языках Ρ‚ΠΈΠΏΠ° C++, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π°Π½ΠΎ Π½Π° ΠΎΡ‚ΠΊΡƒΠΏ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Ρ‚ΠΎ Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… языках Ρ‚ΠΈΠΏΠ° DELPHI, Π±Ρ‹Π»Π° использована модСль подсчСта ссылок. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Π»ΠΎΡΡŒ цикличСских ссылок, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈΡΡŒ потСрянныС кластСра, Ρ‚ΠΎ Π² Go встроСно Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… кластСров (ΠΊΠ°ΠΊ Π² C#). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎ эффСктвности garbage collector прСвосходит Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ извСстных Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для ΠΌΠ½ΠΎΠ³ΠΈΡ… real time Π·Π°Π΄Π°Ρ‡. Π―Π·Ρ‹ΠΊ сам распознаСт ситуации, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для хранСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ Π² стСкС. Π­Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ памяти ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ языка Π²Ρ‹ΡˆΠ΅ всяких ΠΏΠΎΡ…Π²Π°Π». Ни ΠΎΠ΄ΠΈΠ½ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΎΡ‚Π΄Π°Π»Π΅Π½Π½ΠΎ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с языком Go. БправСдливости Ρ€Π°Π΄ΠΈ, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ модСль Π½Π΅ Π±Ρ‹Π»Π° ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π° Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ языка, Π° просто заимствована ΠΈΠ· старого Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ языка ADA. Π―Π·Ρ‹ΠΊ способСн ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… соСдинСний задСйствуя всС CPU, имСя ΠΏΡ€ΠΈ этом Π½Π° порядок Ρ€Π΅ΠΆΠ΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° слоТныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π΄Π΅Π΄Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΈ race conditions.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π³ΠΎΠ΄Ρ‹

Если это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ β€” бСскорыстными станут всС.

Π―Π·Ρ‹ΠΊ Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π½Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ряд нСсомнСнных Π²Ρ‹Π³ΠΎΠ΄:

  • ЕдинствСнный исполнимый Ρ„Π°ΠΉΠ» послС сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ deploy прилоТСния.
  • БтатичСская типизация ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ число ошибок Π² ΠΊΠΎΠ΄Π΅ Π΄Π°ΠΆΠ΅ Π±Π΅Π· написания тСстов. Π― знаю Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ обходятся Π±Π΅Π· написания тСстов ΠΈ ΠΏΡ€ΠΈ этом качСство ΠΈΡ… ΠΊΠΎΠ΄Π° сущСствСнно Π½Π΅ страдаСт.
  • ΠžΡ‡Π΅Π½ΡŒ простая кросс-компиляция ΠΈ отличная ΠΏΠΎΡ€Ρ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Ρ‚ΠΎ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  • РСгулярныС выраТСния RE2 потокобСзопасныС ΠΈ с прСдсказуСмым Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ выполнСния.
  • ΠœΠΎΡ‰Π½Π°Ρ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Ρ‡Ρ‚ΠΎ позволяСт Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· сторонних Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ².
  • Π―Π·Ρ‹ΠΊ достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π·Π°Π΄Π°Ρ‡Π΅, Π° Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя достаточно Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эффСктивно.
  • Π­ΠΊΠΎ систСма Go содСрТит ΡƒΠΆΠ΅ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹ΠΉ инструмСнтарий Π½Π° всС случаи ΠΆΠΈΠ·Π½ΠΈ: тСсты, докумСнтация, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΌΠΎΡ‰Π½Ρ‹Π΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹, кодогСнСрация, Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ race conditions ΠΈ Ρ‚. Π΄.
  • Π£ Go вСрсии 1.11 появилась встроСнноС сСмантичСскоС управлСния зависимостями, построСнноС ΠΏΠΎΠ²Π΅Ρ€Ρ… популярных хостингов VCS. ВсС инструмСнты, входящиС Π² состав экосистСмы Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ эти сСрвисы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΊΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ°Ρ…ΠΎΠΌ. И это Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ. Π‘ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΎΠΌ вСрсии 1.11 Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»Π°ΡΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с вСрсированиСм ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².
  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ основной ΠΈΠ΄Π΅Π΅ΠΉ языка являСтся ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Π³ΠΈΠΈ, язык стимулируСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок явно. И это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΎΠ½ просто Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок. Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок, прСдпочитая вмСсто ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, просто ΠΏΡ€ΠΎΠ±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Π²Π΅Ρ€Ρ….
  • Π―Π·Ρ‹ΠΊ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ классичСской ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ООП, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² чистом Π²ΠΈΠ΄Π΅ Π² Go Π½Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Однако, это Π½Π΅ являСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ использовании интСрфСйсов. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ООП сущСствСнно сниТаСт Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Ρ€ΡŒΠ΅Ρ€ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ².

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

Π£ΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ просто, ΡƒΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒ слоТно.

Go Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ простым ΠΈ ΠΎΠ½ прСуспСл Π² этой Ρ†Π΅Π»ΠΈ. Он Π±Ρ‹Π» написан для ΡƒΠΌΠ½Ρ‹Ρ… программистов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ всС достоинства ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ устали ΠΎΡ‚ бСсконСчной Π²Π°Ρ€ΠΈΠ°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ языков Enterprise уровня. ИмСя Π² своСм арсСналС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшой Π½Π°Π±ΠΎΡ€ синтаксичСских конструкций, ΠΎΠ½ практичСски Π½Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ измСнСниям с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² освобоТдаСтся масса Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° Π½Π΅ для бСсконСчного изучСния Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ языка.

Компании ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ряд прСимущСств: Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΠΎΡ€ΠΎΠ³ вхоТдСния позволяСт быстрСй Π½Π°ΠΉΡ‚ΠΈ спСциалиста, Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ языка позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈ Ρ‡Π΅Ρ€Π΅Π· 10 Π»Π΅Ρ‚.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠΎΠ·Π³Π° Π΅Ρ‰Π΅ Π½Π΅ сдСлал Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ слона Π»Π°ΡƒΡ€Π΅Π°Ρ‚ΠΎΠΌ НобСлСвской ΠΏΡ€Π΅ΠΌΠΈΠΈ.

Для Ρ‚Π΅Ρ… программистов, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»ΠΈΡ‡Π½ΠΎΠ΅ эго ΠΏΡ€Π΅Π²Π°Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΌ Π΄ΡƒΡ…ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΡŽΠ±ΡΡ‚ акадСмичСскиС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ бСсконСчноС «ΡΠ°ΠΌΠΎΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅», язык Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»ΠΎΡ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это рСмСслСнничСский язык ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эстСтичСского ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΡ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сСбя профСссионалом ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ измСряСм ΡƒΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ этими критСриями, Π° Π½Π΅ коэффициСнтом IQ). Как ΠΈ всС Π² ΠΆΠΈΠ·Π½ΠΈ β€” это вопрос Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ². Как ΠΈ всС стоящиС Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°, язык ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π» достаточный ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ всСобщСго отрицания ΠΊ массовому ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΡŽ. Π―Π·Ρ‹ΠΊ Π³Π΅Π½ΠΈΠ°Π»Π΅Π½ ΠΏΠΎ своСй простотС, Π°, ΠΊΠ°ΠΊ извСстно, всС гСниальноС β€” просто!

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