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, то всё заведется и заработает, но это же явно неправильно. Как бы сделать что-то между этими решениями. Отдельный файл но лежащий за пределами стороннего пакета...
Вы можете создать вспомогательный файл в вашем собственном пакете, который будет содержать функцию для расширения функциональности структуры Data из стороннего пакета. Например, вы можете создать файл data_extension.go в вашем пакете main:
Вы можете создать вспомогательный файл в вашем собственном пакете, который будет содержать функцию для расширения функциональности структуры Data из стороннего пакета. Например, вы можете создать файл data_extension.go в вашем пакете main:
package mainimport "ext_api"
func (d *ext_api.Data) PrintDataEx() {
println(d.a, " ", d.b)
}
Затем вы можете использовать эту функцию в вашем основном файле:
package mainimport "ext_api"
func main() {
data := ext_api.Create()
data.PrintDataEx()
}
Это позволит вам добавить дополнительные методы к структуре Data из стороннего пакета без изменения исходного кода пакета.