Go

Go, ΠΈΠ½Π°Ρ‡Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Golang, являСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ языком программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° C, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Π±ΠΎΠ»Π΅Π΅ быстрой компиляции, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конкурСнтности ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ простоты использования.

Разрабатывался ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ примСнялся этот язык Π² Google. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π·Π° нСсколько послСдних Π»Π΅Ρ‚ Π²Π²ΠΈΠ΄Ρƒ увСличСния спроса Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ сСтСвыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΈ ΠΎΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ ΠΊ собСсСдованию Π² Google ΠΈΠ»ΠΈ просто Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Go окаТСтся ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ. БСгодня ΠΌΡ‹ попрактикуСмся Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с этим Π·Ρ‹ΠΊΠΎΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 25 вСроятных вопросов для собСсСдования ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° Π½ΠΈΡ….

План Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ²:

  • вопросы ΠΏΠΎ основам Go;

  • вопросы срСднСго уровня;

  • Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Go;

  • вопросы, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ конкурСнтности;

  • дальнСйшиС шаги обучСния.

Вопросы ΠΏΠΎ основам Go

1. Π’ Ρ‡Π΅ΠΌ прСимущСство Go ΠΏΠ΅Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками?

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

  • Go ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ поддаСтся ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

  • Go Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ признаСтся Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ, Ρ‡Π΅ΠΌ Π΅Π³ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, Π²Π²ΠΈΠ΄Ρƒ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ стандартного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΊΠΎΠ΄Π°.

  • АвтоматичСская сборка мусора Π² Π½Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ эффСктивнСС, Ρ‡Π΅ΠΌ Π² Java ΠΈΠ»ΠΈ Python, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ выполняСтся ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹?

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» β€Šβ€”β€Š это строковая константа, сформированная ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠ΅ΠΉ символов. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² Π΄Π²ΡƒΡ… Π²ΠΈΠ΄Π°Ρ…: Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ (сырыми) ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ строковыми Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ.

Π‘Ρ‹Ρ€Ρ‹Π΅ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² Π»Π΅Π²Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… (foo) ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ символами UTF-8. Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ строками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ содСрТат любой символ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Ρ€Ρ‹Π²Π° строки ΠΈ Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ.

3. КакиС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Go?

Go Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ:

  • Method (ΠΌΠ΅Ρ‚ΠΎΠ΄);

  • Boolean (логичСский Ρ‚ΠΈΠΏ);

  • Numeric (числСнный);

  • String (строковый);

  • Array (массив);

  • Slice (срСз);

  • Struct (структура);

  • Pointer (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ);

  • Function (функция);

  • Interface (интСрфСйс);

  • Map (ΠΊΠ°Ρ€Ρ‚Π°);

  • Channel (ΠΊΠ°Π½Π°Π»).

4. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Go?

ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ (pkg) β€Šβ€”β€Š это ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ пространствС Go, Π³Π΄Π΅ содСрТатся исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. КаТдая функция, пСрСмСнная ΠΈ Ρ‚ΠΈΠΏ ΠΈΠ· исходных Ρ„Π°ΠΉΠ»ΠΎΠ² хранятся Π² связанном с Π½ΠΈΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ» Go ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ этого Ρ„Π°ΠΉΠ»Π°:

МоТно ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ экспортированныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Go β€Šβ€”β€Š это fmt. Он содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ форматирования ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ€ΠΎΠ΄Π΅ Println().

5. ΠšΠ°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ прСобразования Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Go? ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ число Π² число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.

Go ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ явныС прСобразования Ρ‚ΠΈΠΏΠΎΠ², соотвСтствуя трСбованиям строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

6. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°? Как Π΅Π΅ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ?

Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° β€Šβ€”β€Š это функция ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎ с Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½ Π±ΠΎΠ»Π΅Π΅ лСгковСсны, Ρ‡Π΅ΠΌ стандартныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Go ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ тысячи Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½.

Для создания Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ объявлСниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово go.

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ сигнала Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». ΠŸΡ€ΠΈ этом Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ сигналы, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΈΠΌ сказано Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² подходящиС мСста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° for.

7. Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² срСдС выполнСния?

Π›ΡƒΡ‡ΡˆΠΈΠΌ способом ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ являСтся Type Switch (ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠΎΠ²). ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ, Π° Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ содСрТит Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ case, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выступаСт Π² Ρ€ΠΎΠ»ΠΈ инструкции условия, Π° Ρ‚Π°ΠΊΠΆΠ΅ кСйс default, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выполняСтся, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· кСйсов Π½Π΅ Π²Π΅Ρ€Π΅Π½.

НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Type Switch, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ, содСрТит Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i интСрфСйса Ρ‚ΠΈΠΏ int ΠΈΠ»ΠΈ string:

8. Как ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки?

ΠŸΡ€ΠΎΡ‰Π΅ всСго ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ (+), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ строки Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ числовыС значСния.

Вопросы срСднСго уровня

9. ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ шаги тСстирования Π² Golang

Go ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ автоматичСскоС тСстированиС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ настраиваСмых тСстовых Π½Π°Π±ΠΎΡ€ΠΎΠ².

Для формирования Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ Π½Π° _test.go ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Testxxx, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ xxx замСняСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ тСстируСмой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, функция, Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ возмоТности Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ TestLogin.

Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» тСста Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚, Π³Π΄Π΅ находится Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π€Π°ΠΉΠ» тСстирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ стандартном Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ go test.

10. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ замыкания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ?

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€Šβ€”β€Š это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅Π΅ΡΡ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ Π΅Π΅ Ρ‚Π΅Π»Π°. Вакая функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ этим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌ значСния.

НапримСр, adder() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅, привязанноС ΠΊ собствСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ sum, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΎ ссылаСтся.

11. Как Π² Go рСализуСтся наслСдованиС?

Π­Ρ‚ΠΎ нСсколько ΠΊΠ°Π²Π΅Ρ€Π·Π½Ρ‹ΠΉ вопрос: ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ наслСдования Π² Go Π½Π΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ классы.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ наслСдования ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‹ΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, задСйствовав ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для опрСдСлСния Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ повСдСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° структуры. ПослС создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π·Π° Ρ€Π°ΠΌΠΊΠΈ исходной структуры.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Animal содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Eat(), Sleep() ΠΈ Run(). Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΡŽΡŽ структуру Dog простым Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ этой структуры Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Dog.

12. РасскаТитС ΠΎΠ± интСрфСйсах Π² Go. Π§Π΅ΠΌ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚?

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ β€Šβ€”β€Š это особый Ρ‚ΠΈΠΏ Π² Go, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт Π½Π°Π±ΠΎΡ€ сигнатур ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½ΠΎ Π½Π΅ прСдставляСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ЗначСния Ρ‚ΠΈΠΏΠ° interface ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹, ΠΏΠΎ сути, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ плСйсхолдСры для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс geometry, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот интСрфСйс, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ area() ΠΈ perim().

13. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ lvalue ΠΈ rvalue Π² Golang?

Lvalue:

  • ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ располоТСниС Π² памяти;

  • прСдставляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ;

  • ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎ;

  • ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ слСва ΠΈΠ»ΠΈ справа ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° =.

НапримСр, Π² инструкции x =20, x являСтся lvalue, Π° 20 rvalue.

Rvalue:

  • прСдставляСт хранящССся Π² памяти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…;

  • прСдставляСт постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

  • всСгда находится справа ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° =.

НапримСр, инструкция 10 = 20 Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ здСсь rvalue (10) располоТСно слСва ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° =.

14. Как Π² Go Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ конструкции Ρ†ΠΈΠΊΠ»ΠΎΠ²?

Π’ Go Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° конструкция Ρ†ΠΈΠΊΠ»Π°: Ρ†ΠΈΠΊΠ» for. Π’ Π½Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой.

  • Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Init, которая выполняСтся Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ†ΠΈΠΊΠ»Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, здСсь ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная, видимая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ области Ρ†ΠΈΠΊΠ»Π° for.

  • Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ условия, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ вычисляСтся Π² логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, опрСдСляя, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ Ρ†ΠΈΠΊΠ» ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ.

  • Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ post, выполняСмая Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

15. МоТно Π»ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Π”Π°. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Go Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² инструкции return, раздСляя ΠΈΡ… запятыми.

Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Go

16. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ стСк (LIFO)

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ структуру стСка с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ pop, append ΠΈ print top.

РСшСниС

Π‘Ρ‚Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° срСза.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ append() для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ повСдСния присоСдинСния. Π”Π°Π»Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ len(stack)-1 ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΡƒ стСка ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π΅ Π½Π° экран.

Для pop ΠΌΡ‹ устанавливаСм Π² качСствС Π½ΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ стСка ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ значСния, len(stack)-1.

17. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ всС ΠΏΠ΅Ρ€ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ символов срСза ΠΈΠ»ΠΈ строки

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ perm(), ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ срСз ΠΈΠ»ΠΈ строку ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΡΡ‰ΡƒΡŽ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ (Π΅Π΅) символов.

РСшСниС

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΈΠΏΡ‹ rune для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ срСзов, ΠΈ строк. Runes ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ ΠΈΠ· Unicode, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ строки ΠΈ срСзы ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.

18. ΠŸΠΎΠΌΠ΅Π½ΡΠΉΡ‚Π΅ мСстами значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±Π΅Π· использования ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ swap(), ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ значСния Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

РСшСниС

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π½Π°Π΄ этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ придСтся ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π² Go ΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ просто.

Достаточно просто Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ b, a = a, b, Π½Π° Ρ‡ΡŒΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ пСрСмСнная, Π½Π΅ взаимодСйствуя Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

19. Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ min ΠΈ max

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Min(x, y int) ΠΈ Max(x, y int), ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… мСньшСС ΠΈΠ»ΠΈ большСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ соотвСтствСнно.

РСшСниС

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Go ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ min ΠΈ max Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого math.min ΠΈ math.max. Π’Π°ΠΌ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ для Ρ†Π΅Π»Ρ‹Ρ… чисСл.

20. ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ порядок элСмСнтов Π² срСзС

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ reverse, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ срСз Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Π΅Π³ΠΎ Π±Π΅Π· использования Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ срСза.

РСшСниС

Π¦ΠΈΠΊΠ» for мСняСт мСстами значСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта срСза. ЗначСния Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ всС элСмСнты Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹.

21. Как Π»Π΅Π³Ρ‡Π΅ всСго ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ срСз Π½Π° пустоту?

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΡƒΡŽ срСз Π½Π° пустоту. НайдитС самоС простоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

РСшСниС

Π›Π΅Π³Ρ‡Π΅ всСго ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ срСз Π½Π° пустоту с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ len(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ срСза. Если len(slice) == 0, Π·Π½Π°Ρ‡ΠΈΡ‚ срСз пуст.

НапримСр:

22. ΠžΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ строку Π±Π΅Π· Π΅Π΅ Π²Ρ‹Π²ΠΎΠ΄Π°

НайдитС самый простой способ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π½Π΅ выводя Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

РСшСниС

Π›Π΅Π³Ρ‡Π΅ всСго это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fmt.Sprintf(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, Π½Π΅ выводя Π΅Π΅ Π½Π° экран.

НапримСр:

Вопросы, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ конкурСнтности

23. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π² Go

ΠšΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ β€Šβ€”β€Š это, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€Šβ€”β€Š это, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссорах.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ β€Šβ€”β€Š это свойство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт нСскольким Π·Π°Π΄Π°Ρ‡Π°ΠΌ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΆΠ΅ относится ΠΊ свойствам срСды выполнСния, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π·Π°Π΄Π°Ρ‡ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ посрСдством ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π° этом Π΅Π΅ возмоТности Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ инструмСнтами для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ конкурСнтности Π² Go ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹. Π“ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ β€Šβ€”β€Š это ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹Π΅ лСгковСсныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π° ΠΊΠ°Π½Π°Π»Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² процСссС выполнСния.

24. Merge sort

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ merge sort (сортировка слияниСм), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹.

Π’ качСствС ΠΎΠΏΠΎΡ€Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ эту ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

РСшСниС

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΈ сортировкС слияниСм ΠΌΡ‹ рСкурсивно раздСляСм массив Π½Π° right ΠΈ left стороны ΠΈ Π½Π° строках 30-34 Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ MergeSort для ΠΎΠ±Π΅ΠΈΡ… сторон.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Merge(left, right) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ послС получСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ ΠΎΠ±ΠΎΠΈΡ… рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ left ΠΈ right Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Merge(left, right) смоТСт Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Для этого Π½Π° строкС 26 ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ°Π½Π°Π» Ρ‚ΠΈΠΏΠ° bool ΠΈ отправляСм Π² Π½Π΅Π³ΠΎ true сразу послС выполнСния left = MergeSort(data[:mid] (строка 32).

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ <-done Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π½Π° строкС 35 Π΄ΠΎ инструкции Merge(left,right), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»Π°ΡΡŒ, ΠΏΠΎΠΊΠ° Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ получСния true Π² ΠΊΠ°Π½Π°Π»Π΅ done ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ инструкции Merge(left, right) Π½Π° строкС 36.

25. Π‘ΡƒΠΌΠΌΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ²

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SumOfSquares, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ Ρ†Π΅Π»ΠΎΠ΅ число c ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ сумму всСх ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ 1 ΠΈ c. Π’Π°ΠΌ потрСбуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ инструкции select, Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹.

НапримСр, Π²Π²ΠΎΠ΄ 5 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ 55, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ $1Β² + 2Β² + 3Β² + 4Β² + 5Β² = 55$.

Π’ качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ этот ΠΊΠΎΠ΄:

РСшСниС

Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ SumOfSquares. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π° строкС 4 ΠΌΡ‹ объявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ y, послС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ†ΠΈΠΊΠ»Ρƒ For-Select. Π’ инструкциях select прописано Π΄Π²Π° кСйса.

  • case c <- (y*y): слуТит для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° y ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ c, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ принимаСтся Π² Π³ΠΎΡ€ΡƒΡ‚ΠΈΠ½Π΅, созданной Π² основной Ρ€ΡƒΡ‚ΠΈΠ½Π΅.

  • case <-quit: слуТит для получСния сообщСния ΠΈΠ· основной Ρ€ΡƒΡ‚ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вСрнСтся ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Last updated