Как удалить начальные и конечные пробелы в строке в Go?
Используйте функцию strings.TrimSpace для удаления всех пробельных символов
В Go нет встроенного метода strip(), как в Python, но стандартная библиотека предоставляет удобную функцию strings.TrimSpace, которая решает именно вашу задачу. Она удаляет все пробельные символы (Unicode-пробелы, табуляции, переводы строк, возвраты каретки и т.д.) с начала и конца строки.
Вот как исправить ваш пример:
package main
import (
"fmt"
"strings"
)
func main() {
s := " hello world \n"
result := strings.TrimSpace(s)
fmt.Println(result) // Вывод: "hello world"
}
Функция strings.TrimSpace использует определение пробельных символов из стандарта Unicode, поэтому она корректно обрабатывает не только обычные пробелы, но и:
' '— обычный пробел'\t'— табуляция'\n'— перевод строки'\r'— возврат каретки'\v'— вертикальная табуляция'\f'— перевод страницы- Другие Unicode-пробелы (например, неразрывный пробел)
Альтернативы: strings.Trim и strings.TrimFunc
Если вам нужно удалить только определённые символы (например, только пробелы и табуляции, но не переносы строк), используйте strings.Trim с явным указанием набора символов:
s := " hello world \n"
result := strings.Trim(s, " \t") // Удаляем только пробелы и табуляции
fmt.Println(result) // Вывод: "hello world \n" — перенос строки остался
Для более сложной логики (например, удаление только цифр или пользовательских символов) существует strings.TrimFunc, который принимает функцию-предикат:
package main
import (
"fmt"
"strings"
"unicode"
)
func main() {
s := "123hello456"
// Удаляем все цифры с начала и конца
result := strings.TrimFunc(s, unicode.IsDigit)
fmt.Println(result) // Вывод: "hello"
}
Важный нюанс: производительность
strings.TrimSpace работает за O(n), где n — длина строки, и не выделяет дополнительную память, если ничего не нужно удалять (но возвращает новую строку при изменениях). Это оптимально для большинства случаев. Если вы обрабатываете миллионы строк и хотите избежать копирования, можно использовать strings.TrimRight и strings.TrimLeft последовательно, но в 99% случаев TrimSpace — лучший выбор.
Таким образом, для вашей задачи с парсером логов просто замените strings.Trim на strings.TrimSpace, и всё будет работать идеально. Не забудьте импортировать пакет strings.
Ручное удаление пробелов с помощью strings.TrimLeft и strings.TrimRight
Если вы предпочитаете более явный контроль или работаете со старой версией Go (до 1.13, где TrimSpace уже был), можно комбинировать две функции:
package main
import (
"fmt"
"strings"
)
func main() {
s := " hello world \n"
result := strings.TrimRight(strings.TrimLeft(s, " \t\n\r\v\f"), " \t\n\r\v\f")
fmt.Println(result) // Вывод: "hello world"
}
Этот подход явно перечисляет все пробельные символы, которые нужно удалить. Однако он менее удобен, чем TrimSpace, потому что вы можете забыть какой-нибудь символ (например, неразрывный пробел Unicode). Кроме того, такой код сложнее читать.
Когда это может пригодиться?
- Если вам нужно удалить только пробелы, но не табуляции (например,
strings.Trim(s, " ")). - Если вы работаете с очень старым кодом, где
TrimSpaceещё не был встроен (хотя он появился в Go 1.0).
В современных проектах всегда используйте strings.TrimSpace — это идиоматичный и надёжный способ.
Ответов пока нет.
Войдите чтобы оставить ответ