Подстрока в Go
Фрагмент строки получают срезом: в квадратных скобках указывают начало и конец, как у среза массива. Такой срез режет байты исходного текста, а не символы: для латиницы номера совпадают, для букв вне ASCII - нет.
Возьмем кусок латинской строки по байтам:
package main
import "fmt"
func main() {
str := "garden"
part := str[1:4]
fmt.Println(part)
}
Чтобы резать по символам, текст переводят
в []rune, берут срез рун и снова
собирают строку через string:
package main
import "fmt"
func main() {
word := "café"
runes := []rune(word)
byBytes := word[:4]
byRunes := string(runes[:3])
fmt.Println(byBytes)
fmt.Println(byRunes) // выведет caf
}
У слова "café" буква "é" занимает
два байта. Срез первых четырех байт захватывает
начало этой буквы и обрывает ее. Три первые
руны дают целые буквы "caf".
Дана строка:
str := "garden"
Получите фрагмент с второго по четвертый символ и выведите его в консоль.
Дана строка:
str := "user@mail.com"
Получите часть строки до символа '@'
и выведите ее в консоль.
Дана строка:
str := "home/docs/readme.md"
Получите часть строки после последнего слэша и выведите ее в консоль.
Дана строка:
str := "https://site.com/page?q=1"
Получите часть до последнего знака '?'
и выведите ее в консоль.
Дана строка:
str := "time:12:30:45"
Получите часть после первого двоеточия и выведите ее в консоль.