Как обрезать строку в golang до первого вхождения одного из разделителей?

Пусть есть некоторая строка "my.str!" Необходимо извлечь "my."


Ответы (2 шт):

Автор решения: Ainar-G

Используйте strings.SplitAfterN:

func f(s string) (prefix string) {
    var strs = strings.SplitAfterN(s, ".", 2)

    if len(strs) == 1 {
        return ""
    }

    return strs[0]
}

https://play.golang.org/p/afzqaH5yazB

→ Ссылка
Автор решения: Mark

Если вам действительно нужно делать со строкой что-то относительно сложное (а вопрос читается так, что разделителей может быть несколько разных) то вам подойдут регулярные выражения.

В данном примере кроме разделителя . в выражение добавлены разделители , и -.

var r = regexp.MustCompile(`^(.*?[.,-]{1})(.*)`) // регулярное выражение
// нет необходимости парсить регулярное выражение каждый раз при вызове функции
// достаточно объявить статическую переменную

func f(s string) string {
    split := r.FindStringSubmatch(s)
    if len(split) < 2 {
        return ""
    }
    return split[1]
}

https://play.golang.org/p/h8vk4rlH4Qa

Проверить работу вашей регулярки на Go вы можете здесь.

→ Ссылка