В Go существует множество способов работы со строками. Рассмотрим основные:
s1 := "Hello"
s2 := "World"
result := s1 + " " + s2 // "Hello World"
Более эффективный способ для множественного соединения:
var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(" ")
builder.WriteString("World")
result := builder.String()
s := "Привет" // кириллица в UTF-8
fmt.Println(len(s)) // 12 байт
fmt.Println(utf8.RuneCountInString(s)) // 6 символов
s := "Hello"
firstByte := s[0] // 72 (байт 'H')
firstRune, _ := utf8.DecodeRuneInString(s) // 'H'
s1 := "abc"
s2 := "abc"
fmt.Println(s1 == s2) // true
fmt.Println(strings.Compare(s1, s2)) // 0 (эквивалентны)
s := "hello world"
fmt.Println(strings.Contains(s, "wo")) // true
fmt.Println(strings.Index(s, "wo")) // 6
// Разделение
parts := strings.Split("a,b,c", ",") // ["a", "b", "c"]
// Соединение
joined := strings.Join(parts, "-") // "a-b-c"
s := " hello "
trimmed := strings.TrimSpace(s) // "hello"
replaced := strings.ReplaceAll(s, "l", "L") // " heLLo "
s := "Hello"
lower := strings.ToLower(s) // "hello"
upper := strings.ToUpper(s) // "HELLO"
name := "Alice"
age := 25
s := fmt.Sprintf("%s is %d years old", name, age)
s := "日本語"
for i, r := range s {
fmt.Printf("%d: %c\n", i, r)
}
// string -> []byte
data := []byte("hello")
// []byte -> string
s := string([]byte{104, 101, 108, 108, 111})
// int -> string
s := strconv.Itoa(42) // "42"
// string -> int
num, err := strconv.Atoi("42")
Для обработки больших текстов эффективно использовать:
reader := strings.NewReader("Very long text...")
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
line := scanner.Text()
// обработка строки
}
strings
, strconv
, unicode/utf8
strings.Builder
вместо конкатенации[]byte
или []rune