GO - язык программирования, который, на мой взгляд, представляет собой перерождение своеобразное перерождение языка С, но в котором есть такие вещи как сборка мусора, импорт зависимостей и т.п. Поэтому для сборки строк из шаблонов применяются функции из пакета fmt, такие как:
- fmt.Print - для вывода строки, полученной из шаблона в консоль
- fmt.Sprintf - для вывода форматированной строки в переменную
Например, с помощью Sprintf мы можем получить форматированную строку так:
```
greeting := fmt.Sprintf(“Hello, mr. %s. You are in: %s. Good luck mr. %s.”, “Smith”, “Moscow”, “Smith”)
```
Однако уже здесь есть проблема, т.к. каждый % - это отдельный аргумент и в этом примере мы передаем "Smith" дважды. Вообще в C# и Python есть довольно удобная версия форматирования строк через функцию format():
```
greeting = String.format(“Hello, mr. {0}. You are in: {1}. Good luck mr. {0}.”, “Smith”, “Moscow”);
```
В данном случае нам нет необходимости передавать одно значение дважы/триджы/N-раз, а кроме того по месту в C# еще можно и настроить формат, например в случае передачи float/double: {0: 0.# } (один знак после запятой), а в другом месте форматируемой строки добавить больше знаков после запятой. Если вам также как и мне комфортно пользоваться форматированием в таком стиле, то я подготовил модeль доступный на github: https://github.com/Wissance/stringFormatter (поставь звезду если нашел его полезным). Есть 2 варианта использования этого модуля:
1. Использовать для подстановки целочисленных параметров {0}, {1} и т.д.:
```
strFormatResult := Format ("Hello i am {0}, my age is {1} and i am waiting for {2}, because i am {0}!" , "Michael Ushakov (Evillord666)" , "34" , "\" Great Success\" ")
assert .Equal (t , "Hello i am Michael Ushakov (Evillord666), my age is 34 and i am waiting for \" Great Success\" , because i am Michael Ushakov (Evillord666)!" , strFormatResult )
```
2. Подстановка вместо строковых параметров:
strFormatResult = FormatComplex ("Current app settings are: ipAddr: {ipaddr}, port: {port}, use ssl: {ssl}." , map [string ]interface {}{"ipaddr" :"127.0.0.1" , "port" :5432 , "ssl" :false })
assert .Equal (t , "Current app settings are: ipAddr: 127.0.0.1, port: 5432, use ssl: false." , strFormatResult )
В целом есть несколько проблем, но, я широко использую этот модуль в большинстве своих GO-проектов. Более использование функций Format можно посмотреть в тестах (https://github.com/Wissance/stringFormatter/blob/master/formatter_test.go)
Спасибо, что дочитали до конца! )