Найти Ρ‚Π΅ΠΌΡƒ
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста

πŸƒ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ Go для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 8. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Ρ€ΡƒΠ½Ρ‹, Π±Π°ΠΉΡ‚Ρ‹. ΠŸΠ°ΠΊΠ΅Ρ‚ strings. Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° (map)

ОглавлСниС

Π Π°Π½Π΅Π΅ Π² ΡƒΡ€ΠΎΠΊΠ΅ ΠΏΡ€ΠΎ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ познакомились со строками, Ρ€ΡƒΠ½Π°ΠΌΠΈ ΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠΌ наши знания ΠΎΠ± этих Ρ‚ΠΈΠΏΠ°Ρ…, рассмотрим ΠΏΠ°ΠΊΠ΅Ρ‚ strings ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

← Π§Π°ΡΡ‚ΡŒ 7

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΈ слайсы. Append ΠΈ сopy. ΠŸΠ°ΠΊΠ΅Ρ‚ slices

НСмного ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…

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

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ стандартом являСтся ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° Unicode ΠΈΠ· 1 114 112 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° 17 Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠΎ 65 536 символов. ВсС ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии с приставкой Β«U+Β». НапримСр, латинская Π±ΡƒΠΊΠ²Π° Β«aΒ» ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠ΄ Β«U+0061Β», русская Π±ΡƒΠΊΠ²Π° «я» записана ΠΊΠ°ΠΊ Β«U+044FΒ».

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Go опрСдСляСтся ΠΊΠ°ΠΊ тСкст Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8 (Unicode Transformation Format, 8-bit) – стандарт ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ³ΠΎ хранСния символов Unicode, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ с ASCII ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ символы Ρ€Π°Π·Π½Ρ‹ΠΌ количСством Π±Π°ΠΉΡ‚ΠΎΠ². К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² UTF-8 латинский Π°Π»Ρ„Π°Π²ΠΈΡ‚ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ, Π° ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π° – двумя. Данная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ вычислСнии Π΄Π»ΠΈΠ½Ρ‹ строк, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ ознакомлСния с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ «Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ тСкста».

πŸ‘¨β€πŸ’» Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Β»

πŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go для собСса

ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Go Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go для собСса»

🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Go

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Go для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ GoΒ»

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

Π‘Π°ΠΉΡ‚Ρ‹ ΠΈ Ρ€ΡƒΠ½Ρ‹

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… byte Π² Go прСдставляСт псСвдоним для Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ 8-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ цСлочислСнного Ρ‚ΠΈΠΏΠ° uint8. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния ΠΎΡ‚ 0 Π΄ΠΎ 255, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для прСдставлСния ASCII-символов. Блайсы Π±Π°ΠΉΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Π·Π° счСт своСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ гибкости.

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… rune опрСдСляСтся ΠΊΠ°ΠΊ псСвдоним для Ρ‚ΠΈΠΏΠ° int32. Π ΡƒΠ½Π° соотвСтствуСт ΠΊΠΎΠ΄Ρƒ символа Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Unicode. Π’Π°ΠΊ, Ρ‚ΠΈΠΏ символа Β΅ Π΅ΡΡ‚ΡŒ Ρ€ΡƒΠ½Π° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0x00b5.

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ строк, рассмотрим понятиС строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°.

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π» – это константа Ρ‚ΠΈΠΏΠ° string, которая являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ слияния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов. Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Π±Ρ‹Π²Π°ΡŽΡ‚ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² – ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ (ΠΈΠ»ΠΈ сырыС).

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ - это символы, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²ΠΈΠ΄Π° "". ВСкст Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ прСдставляСт собой ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF-8 ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… символов. НапримСр, символ Β΅ ΠΈ Π΅Π³ΠΎ записи \xc2\xb5, \u00b5, \U000000B5 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° 0xc2 0xb5 символа U+00B5 (Β΅) Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8:

НСобработанныС (сырыС) Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ – это символы, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²ΠΈΠ΄Π° ``. Π˜Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся строка ΠΈΠ· нСявно Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² UTF-8 символов. Π’ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ…, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки осущСствляСтся явно с использованиСм enter, Π° символ \n Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния.

Под строками Π² Go ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹. Π’ дальнСйшСм Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ….

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π² Go ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ². Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ строки Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ слайс Π±Π°ΠΉΡ‚ΠΎΠ² ([]byte). ИмСнно ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ индСксу строки Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π΅ символ, Π° Π΅Π³ΠΎ юникод-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² дСсятичной систСмС счислСния:

Π‘Ρ€Π΅Π· [i:j] Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ строку, которая состоит ΠΈΠ· Π±Π°ΠΉΡ‚ΠΎΠ² исходной, начиная с индСкса i ΠΈ заканчивая индСксом j, Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ Π΅Π³ΠΎ:

Π’ послСднСй строкС Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ странный символ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция fmt.Println пытаСтся Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ строки str[0:1], Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ СдинствСнный Π±Π°ΠΉΡ‚ 0xd1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ соотвСтствуСт Π½ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ символу Π² UTF-8. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ символ с ΠΊΠΎΠ΄ΠΎΠΌ 0xfffd.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ сравнСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ производится ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ ΠΈ ΠΏΠΎ Π±Π°ΠΉΡ‚Π°ΠΌ:

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со строками – конкатСнация ΠΈ интСрполяция.

ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ – это опСрация слияния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ‡Π°Ρ‰Π΅ всСго строк) Π² ΠΎΠ΄ΠΈΠ½.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ – это опСрация Π·Π°ΠΌΠ΅Π½Ρ‹ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π΅ΠΉ строки ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями.

Как ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования, конкатСнация строк Π² Go рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° +:

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ Π² Go Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°Ρ‡Π΅, Ρ‡Π΅ΠΌ Π² динамичСских языках. Она осущСствляСтся с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚Π° fmt:

Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

πŸƒ Готовимся ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΏΠΎ Golang: массивы, слайсы ΠΈ строки

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ Ρ€ΡƒΠ½Π°ΠΌ

Π¦ΠΈΠΊΠ» for-range ΠΏΠΎ строкС Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½Ρƒ Ρ€ΡƒΠ½Ρƒ Π² UTF-8:

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Unicode прСдставлСниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа строки ΠΈ Π΅Π³ΠΎ индСкс:

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ каТдая Ρ€ΡƒΠ½Π° здСсь Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, Π° Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция len() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π±Π°ΠΉΡ‚ΠΎΠ², Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… строкой, Π° Π½Π΅ количСство символов, Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π° строки Π² Π΄Π²Π° Ρ€Π°Π·Π° большС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ – 10 вмСсто 5. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² UTF-8 ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, Π° Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ язык Go ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ, Ρ‚ΠΎ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²ΠΏΠΎΠ»Π½Π΅ обоснованный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π‘ латинскими символами всё Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°Ρ‡Π΅:

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ значСния индСксов ΠΈ Π΄Π»ΠΈΠ½Ρ‹:

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС для получСния ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ строки слСдуСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ Π² слайс Ρ€ΡƒΠ½ ΠΈΠ»ΠΈ ΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ utf8.RuneCountInString() ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° unicode/utf8:

Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² слайс Ρ€ΡƒΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ памяти, Ρ‡Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ utf8.RuneCountInString(). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ эффСктивнСС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ Π±Π°ΠΉΡ‚Π°ΠΌ (индСксам)

Как Π±Ρ‹Π»ΠΎ рассмотрСно Ρ€Π°Π½Π΅Π΅, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎ индСксам строки выдаст Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ прСдставлСниС символов. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сохраняСтся ΠΏΡ€ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:

Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ строкС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ дСсятичноС прСдставлСниС Π½ΠΈΠΆΠ½ΠΈΡ… 16-Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ символов строки Π² UTF-8:

Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ символы строки, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ fmt.Printf ΠΈ спСцификатором %c:

ΠŸΠ°ΠΊΠ΅Ρ‚ strings

ΠŸΠ°ΠΊΠ΅Ρ‚ string стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ содСрТит ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

  • ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ символа Π² строку – strings.Count(s, substr string) int:
  • Π—Π°ΠΌΠ΅Π½Π° символов – strings.Replace(s, old, new string, n int) string:
  • Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ символов ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŽ sep – strings.Split(s, sep string) []string:
  • БлияниС строк с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ sep – strings.Join(elems []string, sep string) string:
  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру – strings.ToLower(s string) ΠΈΠ»ΠΈ strings.ToUpper(s string):

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ strings ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡƒΡΡ‚ΡŒ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ большого количСства строк. Π”Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° + нСэффСктивно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ новая строка. Π’ этой ситуации стоит Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ структурой Builder ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° strings:

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π°

ПослС знакомства со строками, Ρ€ΡƒΠ½Π°ΠΌΠΈ ΠΈ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π΅Ρ‘ поиск.

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° – это структура Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ интСрфСйс ассоциативного массива. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½Π° выполняСт Ρ‚Ρ€ΠΈ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ поиск ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ примСнСния ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ Π² индСкс ячСйки для записи Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Доступ ΠΊ элСмСнту Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вычислСния Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ индСксом ячСйки с искомым элСмСнтом.

   Наглядная ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
Наглядная ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Битуация, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…Π΅Ρˆ-функция ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ индСкс, называСтся ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠ΅ΠΉ. Π§Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Ρ…Π΅Ρˆ-функция, Ρ‚Π΅ΠΌ мСньшС Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ΠΈ количСство ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ.

БущСствуСт Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ:

  • ΠœΠ΅Ρ‚ΠΎΠ΄ списков

Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² связывании ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ-список. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС врСмя поиска Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π΅ списка. ΠΠ°ΠΈΡ…ΡƒΠ΄ΡˆΠ΅ΠΉ ситуациСй являСтся Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх n ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ячСйкС.

  • ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ адрСсации

Π’ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ всС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты хранятся Π² самой Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π΅Π· использования списков. ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ производится поиск свободной ячСйки для вставки Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ элСмСнта.

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° (map) Π² Go

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ† Π² Go. Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ погруТСния Π² Ρ‚Π΅ΠΌΡƒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹: исходный ΠΊΠΎΠ΄ map, Effective Go: Maps, ΠœΠ°ΠΏΡ‹ Π² Go: ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Pro.

Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² Go (Ρ‚Π°ΠΊΠΆΠ΅ Π΅Ρ‘ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ map, ΠΌΠ°ΠΏΠ°, ΠΊΠ°Ρ€Ρ‚Π°) опрСдСляСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом map ΠΈ создаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов, Π³Π΄Π΅ keys_type – Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, values_type – Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

  • ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ – с использованиСм make:
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова var создаСтся nil-map:

Π‘ этим способом Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹ΠΌ. Если послС Ρ‚Π°ΠΊΠΎΠ³ΠΎ создания ΠΌΠ°ΠΏΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ panic:

  • Π‘ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ элСмСнтов Π² скобках:

ΠŸΡ€ΠΈ этом стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сравнимыС (comparable) Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…: числовыС (int, float, complex), string, bool, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, интСрфСйс, ΠΊΠ°Π½Π°Π» ΠΈ структуры ΠΈΠ»ΠΈ массивы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этих Ρ‚ΠΈΠΏΠΎΠ².

ΠΠ°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠ°ΠΏΡƒ, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π½Π΅ΠΉ:

  1. Вставка: mp[key] = value
  2. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅: delete(mp, key)
  3. Поиск: value := mp[key]

Если Π² ΠΌΠ°ΠΏΠ΅ Π½Π΅ окаТСтся искомого значСния, Ρ‚ΠΎ вСрнСтся Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°:

Но стоит ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ nil, Ссли Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΆΠ΅ являСтся nil.

Для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия элСмСнта Π² ΠΌΠ°ΠΏΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мноТСствСнноС присваиваниС. Π’ этом случаС возвращаСтся ΠΏΠ°Ρ€Π° – само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ булСвая пСрСмСнная. Если ΠΎΠ½Π° Ρ€Π°Π²Π½Π° true, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ присутствиС искомого элСмСнта Π² ΠΌΠ°ΠΏΠ΅, ΠΈΠ½Π°Ρ‡Π΅ – Π΅Π³ΠΎ отсутствиС:

Мапа Π² Go являСтся нСупорядочСнной структурой Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΅Ρ‘ ΠΎΠ±Ρ…ΠΎΠ΄Π΅ Π² Ρ†ΠΈΠΊΠ»Π΅ Π²Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ запуска ΠΊ запуску. Π§Ρ‚ΠΎΠ±Ρ‹ Π² этом ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ нСсколько Ρ€Π°Π·:

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΌΠ°ΠΏΡ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΌΠ°ΠΏΡ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° создадим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ changeMap, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ°ΠΏΡƒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π½Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ 1 ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎ своё Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

НС стоит Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΠΏΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π»Π°ΡΡŒ ΠΏΠΎ ссылкС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Go Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ отсутствуСт. Всё Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΠΏΠ° Π² Go являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° структуру hmap:

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ map2 Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ changeMap объявлялась с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ make:

Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ map2 Π² changeMap отличаСтся ΠΎΡ‚ mp Π² main:

Π’ этом случаС ΠΌΠ°ΠΏΠ° mp пСрСдаСтся ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² changeMap, поэтому Π½Π΅ мСняСтся. ВсС измСнСния коснутся Π΅Ρ‘ локальной ΠΊΠΎΠΏΠΈΠΈ map2, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ созданиС ΠΌΠ°ΠΏΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ make ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ hmap.

ΠŸΠΎΠ΄Π²Π΅Π΄Ρ‘ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ

Π’ этой части самоучитСля ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… ΠΈ ΠΈΡ… особСнностях, Π½Π° основС этих Π·Π½Π°Π½ΠΈΠΉ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ устройство строк Π² Go ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ strings, Π° Π² Π±Π»ΠΎΠΊΠ΅ ΠΏΡ€ΠΎ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ познакомились с эффСктивным способом хранСния ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ, рассмотрСли структуру Π΄Π°Π½Π½Ρ‹Ρ… map Π² Go.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΈ Π΅Π³ΠΎ основных ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…: структур, интСрфСйсов ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ.

***

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ самоучитСля

  1. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, Ρ€ΡƒΠ½Ρ‹, Π±Π°ΠΉΡ‚Ρ‹. ΠŸΠ°ΠΊΠ΅Ρ‚ strings. Π₯Сш-Ρ‚Π°Π±Π»ΠΈΡ†Π° (map)