Строки в 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
, которая вернет строку-приветствие. Например, при передаче имени Иван
, возвращается Привет, Иван!
. Учтите, что имя может быть написано в разном регистре и содержать пробелы.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1package solution
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7)
8
9func TestGreetings(t *testing.T) {
10 a := assert.New(t)
11 a.Equal("Привет, Иван!", Greetings(" иван"))
12 a.Equal("Привет, Петр!", Greetings("ПЕТР"))
13 a.Equal("Привет, Василий!", Greetings(" вАсиЛИЙ "))
14}
15
Решение учителя откроется через: