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
182 +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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир