Как в GO написать свою функцию к другим типам?

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

Для создания новой функции к типу, необходимо сначала объявить новый тип, который будет являться оберткой для исходного типа. Этот новый тип должен иметь тот же самый набор полей, что и исходный тип, а также дополнительные методы, которые вы хотите добавить.

Например, предположим, что у нас есть структура Point, которая представляет точку на плоскости:

type Point struct {
    X float64
    Y float64
}

Мы хотим добавить к этому типу метод для вычисления расстояния между двумя точками. Для этого мы можем определить новый тип PointEx, который будет содержать метод Distance:

type PointEx Point

func (p PointEx) Distance(q PointEx) float64 {
    return math.Sqrt(math.Pow(q.X-p.X, 2) + math.Pow(q.Y-p.Y, 2))
}

В этом примере PointEx является новым типом, определенным на основе исходного типа Point. Метод Distance принимает в качестве аргумента другой объект PointEx и возвращает расстояние между текущей точкой и переданной точкой.

Теперь, при использовании нового типа PointEx, мы можем вызывать метод Distance:

p1 := PointEx{X: 0, Y: 0}
p2 := PointEx{X: 3, Y: 4}
fmt.Println(p1.Distance(p2)) // Вывод: 5

Таким образом, мы смогли добавить собственные функции к существующим типам в Go.