Go можно ли написать функцию расширяющую сторонний пакет? Есть некий пакет:
ext_api.gopackage ext_api
type Data struct {
a string
b int
}
func Create() Data {
d := Data{"text", 10}
return d
}
func (d *Data) PrintData() {
println(d.a)
}
И его использование:package main
import "ext_api"
func main() {
data := ext_api.Create()
data.PrintData()
}
Хочется как-то написать свою функцию, напримерfunc (d *Data) PrintDataEx() {
println(d.a, " ", d.b)
}
Если её попробовать добавить в основной пакет то получим "cannot define new methods on non-local type ext_api.Data"
Что, наверное, логично.
Но если добавить свой файл в каталог этого пакета с указанием имени пакета package ext_api, то всё заведется и заработает, но это же явно неправильно.
Как бы сделать что-то между этими решениями. Отдельный файл но лежащий за пределами стороннего пакета...

21 Авг 2019 в 06:59
156 +1
0
Ответы
1

Вы можете создать вспомогательный файл в вашем собственном пакете, который будет содержать функцию для расширения функциональности структуры Data из стороннего пакета. Например, вы можете создать файл data_extension.go в вашем пакете main:

package main
import "ext_api"
func (d *ext_api.Data) PrintDataEx() {
println(d.a, " ", d.b)
}

Затем вы можете использовать эту функцию в вашем основном файле:

package main
import "ext_api"
func main() {
data := ext_api.Create()
data.PrintDataEx()
}

Это позволит вам добавить дополнительные методы к структуре Data из стороннего пакета без изменения исходного кода пакета.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 887 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир