Бесплатный курс по Go. Зарегистрируйтесь для отслеживания прогресса →

Go: Строки

Строки в Go объявляются с типом string:

var s string = "hello"

// сокращенная запись
s := "hey"

Практически всегда для строк используются двойные кавычки. Однако они не подходят, когда нужно написать несколько строк. Для этого используются обратные кавычки:

q := `
    SELECT *
    FROM person
    WHERE age > 18
`

Строки можно сравнивать операторами: ==, >, <, <=, >=, где строки сравниваются посимвольно в лексическом порядке и по длине. Это свойство часто используется при сортировке массива строк:

"привет" == "привет" // true
"golang" > "go" // true
"golang" > "lang" // false
"go" > "foobar" // true

Базовые операции со строками в любом языке — это конкатенация и интерполяция. Конкатенация осуществляется с помощью знака +:

"hello " + "world" // "hello world"

В Go нет привычной интерполяции, как в динамических языках. Она реализуется через форматирующую функцию fmt.Sprintf:

username := "Ivan"

greetings := fmt.Sprintf("hello, %s", username) // "hello, Ivan"

Узнать длину строки можно с помощью встроенной функции len:

len("go") // 2

// будьте внимательны! Функция считает кол-во байт, а не кол-во символов
len("го") // 4

Задание

Для работы со строками часто используется стандартная библиотека strings. В данном задании вам понадобятся следующие функции:

// обрезает символы, переданные вторым аргументом, с обеих сторон строки
Trim(s, cutset string) string
// пример
strings.Trim(" hello ", " ") // "hello"

// преобразует все буквы в строке в нижний регистр
strings.ToLower(s string) string
// пример
strings.ToLower("пРиВеТ") // "привет"

// озаглавливает первую букву в каждом слове в строке с указанием языка
cases.Title(language.Russian).String(s string) string
// пример
cases.Title(language.Russian).String("привет, джон") // "Привет, Джон"

Реализуйте функцию Greetings(name string) string, которая вернет строку-приветствие. Например, при передаче имени Иван, возвращается Привет, Иван!. Учтите, что имя может быть написано в разном регистре и содержать пробелы.

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе