Пакет strings
в Go позволяет использовать ряд функций для работы со строковым типом данных. Эти функции позволяют нам легко изменять строки и совершать с ними другие манипуляции. Функции можно сравнить с определенными действиями, которые мы совершаем с элементами нашего кода. Встроенные функции — это функции, которые определены в языке программирования Go и доступны для использования без каких-либо сложностей.
В этом обучающем руководстве мы рассмотрим несколько различных функций, которые мы можем использовать для работы со строками в Go.
Функции strings.ToUpper
и strings.ToLower
будут возвращать строку со всеми символами оригинальной строки, переведенными в верхний или нижний регистр. Поскольку строки — это неизменяемый тип данных, возвращенная строка будет представлять собой новую строку. Любые символы в строке, которые не являются буквам, останутся неизменными.
Для преобразования строки "Sammy Shark"
в верхний регистр, используйте функцию strings.ToUpper
:
ss := "Sammy Shark"
fmt.Println(strings.ToUpper(ss))
OutputSAMMY SHARK
Для преобразования строки в нижний регистр используйте следующий код:
fmt.Println(strings.ToLower(ss))
Outputsammy shark
Поскольку вы используете пакет strings
, вам нужно предварительно импортировать его в программу. Программа для преобразования строки в строку с символами в верхнем и нижнем регистре будет выглядеть следующим образом:
package main
import (
"fmt"
"strings"
)
func main() {
ss := "Sammy Shark"
fmt.Println(strings.ToUpper(ss))
fmt.Println(strings.ToLower(ss))
}
Функции strings.ToUpper
и strings.ToLower
упрощают оценку и сравнение строк, обеспечивая единообразие их регистра. Например, если пользователь пишет свое имя в нижнем регистре, мы все равно сможем определить, содержится ли его имя в нашей базе данных, проверив версию строки в верхнем регистре.
Пакет strings
имеет ряд функций, которые помогают определить, содержит ли строка конкретную последовательность символов.
Функция | Использование |
---|---|
strings.HasPrefix |
Поиск строки с начала |
strings.HasSuffix |
Поиск строки с конца |
strings.Contains |
Поиск в любом месте строки |
strings.Count |
Счетчик количества появлений строки в тексте |
Функции strings.HasPrefix
и strings.HasSuffix
позволяют проверить, начинается строка с определенного набора символов или заканчивается ли строка определенным набором символов.
Например, чтобы проверить, начинается ли строка "Sammy Shark"
с Sammy
и заканчивается ли она словом Shark
:
ss := "Sammy Shark"
fmt.Println(strings.HasPrefix(ss, "Sammy"))
fmt.Println(strings.HasSuffix(ss, "Shark"))
Outputtrue
true
Вы можете использовать функцию strings.Contains
для проверки того, содержит ли строка "Sammy Shark"
последовательность символов Sh
:
fmt.Println(strings.Contains(ss, "Sh"))
Outputtrue
Наконец, чтобы узнать, сколько раз символ S
появляется в выражении Sammy Shark
:
fmt.Println(strings.Count(ss, "S"))
Output2
Примечание. Все строки в Go чувствительны к регистру. Это означает, что строка Sammy
не аналогична строке sammy
.
Использование символа s
в нижнем регистре для подсчета количества появлений в строке Sammy Shark
не дает тот же результат, что и использование символа S
в верхнем регистре:
fmt.Println(strings.Count(ss, "s"))
Output0
Так как S
отличается от s
, функция будет возвращать значение 0
.
Функции для работы со строками оказываются полезны, когда вы хотите сопоставить строки или выполнить поиск строк в вашей программе.
Встроенная функция len()
возвращает количество символов в строке. Эта функция полезна, когда вам нужно установить минимальную или максимальную длину пароля или установить определенный лимит для больших строк для использования сокращений.
Для демонстрации работы этой функции мы определим длину строки, которая содержит целое предложение:
import (
"fmt"
"strings"
)
func main() {
openSource := "Sammy contributes to open source."
fmt.Println(len(openSource))
}
Output33
Мы задали переменную OpenSource
, которая соответствует строке "Sammy contributes to open source."
, а затем передали эту переменную в функцию len()
с помощью конструкции len(openSource)
. В конечном итоге мы передали вывод нашей функции в функцию fmt.Println()
, чтобы увидеть результат выполнения программы на экране.
Необходимо учитывать, что функция len()
будет считать любые символы, которые содержатся внутри двойных кавычек, включая буквы, числа, символы пробела и специальные символы.
Функции strings.Join
, strings.Split
и strings.ReplaceAll
предоставляют ряд дополнительных методов манипуляций со строками в Go.
Функция strings.Join
полезна для объединения набора строк в новую единую строку.
Для создания разделенной запятой строки из набора строк мы будем использовать эту функцию следующим образом:
fmt.Println(strings.Join([]string{"sharks", "crustaceans", "plankton"}, ","))
Outputsharks,crustaceans,plankton
Если мы хотим добавлять запятую и пробел между значениями строк в нашей новой строке, мы можем просто перезаписать наше выражение с пробелом после запятой: strings.Join([]string{"sharks", "crustaceans", "plankton"}, ", ")
.
Так же, как мы можем объединять строки, мы можем и разбивать строки на несколько отдельных строк. Для этого мы можем использовать функцию strings.Split
и выполнить разделение строки по пробелам:
balloon := "Sammy has a balloon."
s := strings.Split(balloon, " ")
fmt.Println(s)
Output[Sammy has a balloon]
В результате мы получим набор строк. Поскольку мы использовали strings.Println
, очень трудно сказать, какой мы получили результат, посмотрев на вывод. Чтобы убедиться, что мы получили набор строк, используйте функцию fmt.Printf
с оператором %q
, чтобы вывести строки:
fmt.Printf("%q", s)
Output["Sammy" "has" "a" "balloon."]
Еще одной полезной функцией, помимо strings.Split
, является функция strings.Fields
. Разница между этими функциями состоит в том, что strings.Fields
будет игнорировать все пробелы и разделять строку по реальным полям
в строке:
data := " username password email date"
fields := strings.Fields(data)
fmt.Printf("%q", fields)
Output["username" "password" "email" "date"]
Функция strings.ReplaceAll
получает оригинальную строку и возвращает обновленную строку с определенными изменениями.
Давайте представим, что Sammy потерял свой шарик. Поскольку у Sammy больше нет шарика, мы изменим подстроку "has"
(есть) оригинальной строки ballon
на "had"
(был) в новой строке:
fmt.Println(strings.ReplaceAll(balloon, "has", "had"))
В скобках первым параметром указан balloon
, переменная, которая хранит оригинальную строку; далее идет подстрока "has"
, которую мы хотим заменить, а третьим параметром идет "had"
, подстрока, которую мы хотим вставить в оригинальную строку. Наш вывод будет выглядеть следующим образом, когда мы добавим этот код в программу:
OutputSammy had a balloon.
Использование функций strings.Join
, strings.Split
и strings.ReplaceAll
позволяет получить дополнительные возможности для манипуляций со строками в Go.
В этом обучающем руководстве мы изучили ряд стандартных функций пакета string для строковых данных, которые вы можете использовать для работы со строками в ваших программах Go.
Дополнительную информацию о других типах данных вы можете получить в статье Знакомство с типами данных, а узнать больше о строках можно из руководства Начало работы со строками.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Указанный автором способ определения длинны строки будет верным только в случае использования ASCII символов в строке. Функция len вернет не количество символов, а количество байт. Для строки в юникоде (например 世界) len(“世界”) не будет соответствовать количеству рун в строке. Более универсальным будет использование пакета “unicode/utf8”: package main
import “fmt” import “unicode/utf8”
func main() { fmt.Println(“Hello, 世界”, len(“世界”), utf8.RuneCountInString(“世界”)) }