Я новичок в Go и хотел бы продлить treemap.Map
из GoDS
проекта.
Я начал с определения псевдонима типа для treemap.Map
:
import "github.com/emirpasic/gods/maps/treemap"
type Index = treemap.Map
func (idx Index) Add(k int, v int) {
idx.Put(k, v)
}
Получение следующей ошибки компиляции: cannot define new methods on non-local type treemap.Map
После этого я изменил псевдоним типа к определению типа:
type IndexType treemap.Map
func (idx IndexType) Add(k int, v int) {
idx.Put(k, v)
}
Теперь я начал получать следующую ошибку: idx.Put undefined (type IndexType has no field or method Put)
.
Первоначально предполагалось, что я получаю эту ошибку, потому что Put
определен для типа указателя и на основании этого наивного предположения я изменил тип получателя:
func (idx *IndexType) Add(k int, v int) {
idx.Put(k, v)
}
Doesn ' t compile: idx.Put undefined (type *IndexType has no field or method Put)
Попробовал другой способ:
func (idx IndexType) Add(k int, v int) {
(&idx).Put(k, v)
}
Не компилируется: (&idx).Put undefined (type *IndexType has no field or method Put)
Я также пытался type IndexType *treemap.Map
, но это не удалось приведи меня ко всему. Я потратил несколько часов, пытаясь понять логику c, стоящую за этими ошибками, но не смог найти логического объяснения.
Я знаю, что могу достичь своей цели, используя embedding
:
import "github.com/emirpasic/gods/maps/treemap"
type IndexType struct {
*treemap.Map
}
func (idx IndexType) Add(k int, v int) {
idx.Put(k, v)
}
Приведенный выше код компилируется.
Однако у меня остается вопрос: можно ли расширить тип, например treemap.Map
, используя оператор type
? голе