Вы должны присвоить результаты разделения переменной, а не вызывать ее дважды.
ss := strings.Split(msg, ".")
s := ss[len(ss)-1]
(Обратите внимание, что это позволяет (или, возможно, вынуждает) вас разобраться со случаем, когда ss
пусто или что-то еще неожиданно явно, перед индексацией.)
Если вы делаете это снова и снова, и это оскорбляет вас тем, что вам нужно использовать две строки (или две строки плюс обработку ошибок) вместо одной, вы можете довольно просто абстрагировать ее в функцию:
func lastString(ss []string) string {
return ss[len(s)-1]
}
s1 := lastString(strings.Split("example.txt", "."))
s2 := lastString(strings.Split("example.jpg", "."))
В конце концов, передача результата функции в качестве аргумента имеет практически тот же эффект, что и привязка его к переменной.