String ends with?
Complete the solution so that it returns true if the first argument(string) passed in ends with the 2nd argument (also a string).


Examples:
solution("abc", "bc") // returns true
solution("abc", "d") // returns false

Задача 7 уровня сложности (на сайте кодварс 8 самый легкий, 1 самый сложный). Завершите решение, чтобы оно возвращало истину, если первый переданный аргумент (строка) заканчивается вторым аргументом (также строкой).

В задаче дана функция с двумя входящими строковыми параметрами, вернуть нужно булевное значение.

func solution(str, ending string) bool {

}

Первая мысль при решении этой задачи была определить количество символов в строке ending и сравнить заканчивается ли строка str на неё.

func solution(str, ending string) bool {
  l := len(ending)
  if str[len(str)-l:] == ending {
    return true
  }
  return false
}

Прекрасно вылетел с ошибкой, т.к. строки могут быть пустыми или ending длиннее параметра str, добавляем проверку что бы длинна str была больше ending.

func solution(str, ending string) bool {
  if len(str) < len(ending) {return false}

l := len(ending) if str[len(str)-l:] == ending { return true } return false }

Супер, все работает задача решена, но решение это не очень хорошее.

Лучшее решение \ Best practice

import "strings"

func solution(str, ending string) bool { return strings.HasSuffix(str, ending) }

Использовать функцию strings.HasSuffix является лучшим решением, функция проверяет заканчивается ли строка указанной подстрокой. Залезем в исходники golang и посмотрим как реализована эта функция.

// HasSuffix tests whether the string s ends with suffix.
func HasSuffix(s, suffix string) bool {
	return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
}

Сразу понимаем что наше решение хорошее и оно достойно исходников го, только написано не так компактно.