Olej писал(а): ↑18 янв 2024, 03:51
По крайней мере, всякие "фишки", которые выявляются по дороге...
Только вещи которые не очевидные...
Строчные литерал:
... в Go, для обеспечения разнообразными форматами представления, этого оказывается мало.
• Традиционная запись строк в двойных кавычках допускает управляющие последовательности в строке, в потоке, отмечаемые обратным слэшем, мы их уже неоднократно видели, как например: "\n", "\t", "\r", "\x" (этот формат предоставляет возможность записать прямое 16-ричное значение в байт)…
• Сырое (raw) представление строки, в котором любые символы записываются «as is», без всякого управляющего смысла, записываются в одиночных кавычках, только не в тех одиночных кавычках, как в языке Python и некоторых других, а в обратных кавычках (на клавиатуре соответствующие букве Ё). Например: `это знак переноса строки: \n`.
• А обычные одиночные кавычки в Go зарезервированы для записей литералов типа rune, которые тоже имеют некоторый смысл в контексте строчных представлений, но являются целочисленными значениями int32. Например: 'Ю'.
Пример:
Код: Выделить всё
package main
import "fmt"
func main() {
s := "🔥요£µЩ"
r := []rune(s)
fmt.Printf("%x : байт %d символов %d\n", s, len(s), len(r))
fmt.Printf("%#v\n", []byte(s))
for p, c := range s {
fmt.Printf("%d[%#U] ", p, c)
}
println()
for i := 0; i < len(r); i++ {
fmt.Printf("%x ", r[i])
}
println()
// f0 9f 94 a5 ec 9a 94 c2 a3 c2 b5 d0 a9
s = "\xf0\x9f\x94\xa5\xec\x9a\x94\xc2\xa3\xc2\xb5\xd0\xa9"
fmt.Printf("%s\n", s)
s = `\xf0\x9f\x94\xa5\xec\x9a\x94\xc2\xa3\xc2\xb5\xd0\xa9`
fmt.Printf("%s\n", s)
s = string([]rune{0x1f525, 0xc694, 0xA3, 0xB5, 0x429})
fmt.Printf("%s\n", s)
s = string([]rune{'🔥', '요', '£', 'µ', 'Щ'})
fmt.Printf("%s\n", s)
}
И выглядит это так (запускаю код как скрипт - это ещё одна "фишка" Go):
Код: Выделить всё
olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples.work/strings/runes$ go run raw.go
f09f94a5ec9a94c2a3c2b5d0a9 : байт 13 символов 5
[]byte{0xf0, 0x9f, 0x94, 0xa5, 0xec, 0x9a, 0x94, 0xc2, 0xa3, 0xc2, 0xb5, 0xd0, 0xa9}
0[U+1F525 '🔥'] 4[U+C694 '요'] 7[U+00A3 '£'] 9[U+00B5 'µ'] 11[U+0429 'Щ']
1f525 c694 a3 b5 429
🔥요£µЩ
\xf0\x9f\x94\xa5\xec\x9a\x94\xc2\xa3\xc2\xb5\xd0\xa9
🔥요£µЩ
🔥요£µЩ
Любопытно...