byte_slice.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. import (
  3. "fmt"
  4. "unicode"
  5. "unicode/utf8"
  6. )
  7. func main() {
  8. // ExampleBytesSlice()
  9. // ExampleRune()
  10. ExampleUnicode()
  11. }
  12. func ExampleBytesSlice() {
  13. // Используем строку, которую конвертируем в []byte,
  14. // чтобы показать, как выглядит байтовый срез.
  15. bs := []byte("Это байтовый срез")
  16. // Печатаем байтовый срез.
  17. fmt.Printf("Так байтовый срез выглядит внутри: %v\n", bs)
  18. // Демонстрируем, что быйтовый срез можно изменять,
  19. // а затем выводи его в виде строки.
  20. for i := range bs {
  21. // Для четных байтов увеличиваем на 1, для нечетных уменьшаем на 1
  22. if bs[i]%2 == 0 {
  23. bs[i] = bs[i] + 1
  24. } else {
  25. bs[i] = bs[i] - 1
  26. }
  27. }
  28. // Печатаем измененный байтовый срез в виде строки.
  29. fmt.Printf("Измененный байтовый сред в виде строки: %s", bs)
  30. }
  31. func ExampleRune() {
  32. // Преобразуем строку в срез рун
  33. rs := []rune("Это срез рун")
  34. // Итерируемся по срезу рун и заменяем символ 'р' на '*'
  35. for i := range rs {
  36. // fmt.Println(rs[i])
  37. if rs[i] == 'р' {
  38. rs[i] = '*'
  39. }
  40. }
  41. // Выводит измененный срез в виде строки
  42. fmt.Printf("Измененный срез в виде строки: %s\n", string(rs))
  43. }
  44. func ExampleUnicode() {
  45. // функции ниже принимают на вход тип rune
  46. // проверка символа на цифру
  47. fmt.Println(unicode.IsDigit('1')) // true
  48. // проверка символа на букву
  49. fmt.Println(unicode.IsLetter('a')) // true
  50. // проверка символа на нижний регистр
  51. fmt.Println(unicode.IsLower('A')) // false
  52. // проверка символа на верхний регистр
  53. fmt.Println(unicode.IsUpper('A')) // true
  54. // проверка символа на пробел
  55. // пробел это не только ' ', но и:
  56. // '\t', '\n', '\v', '\f', '\r' - подробнее читайте в документации
  57. fmt.Println(unicode.IsSpace('\t')) // true
  58. // С помощью функции Is можно проверять на кастомный RangeTable:
  59. // например, проверка на латиницу:
  60. fmt.Println(unicode.Is(unicode.Latin, 'ы')) // false
  61. // функции преобразований
  62. fmt.Println(string(unicode.ToLower('F'))) // f
  63. fmt.Println(string(unicode.ToUpper('f'))) // F
  64. var en = "english"
  65. var ru = "русский"
  66. fmt.Println(len(en), len(ru))
  67. fmt.Println(utf8.RuneCountInString(en), utf8.RuneCountInString(ru))
  68. }