Обновление:
Этот код прекрасно компилируется здесь (все в одном пакете):
type Object interface {
ActivateSlot(name string, parameters vector.Vector);
}
type Slot struct {
name string;
stuff Object;
}
const slotname = "printer"
type printer struct {
slot Slot;
}
func (p *printer) Init() {
p.slot = Slot{slotname, p}; // offending line
}
func (p *printer) ActivateSlot(name string, parameters vector.Vector) {
fmt.Println("Slot called: ", name);
}
Похоже, вам не хватает * принтера типа Object, и вы пытаетесь присвоить его полю типа * Object другого типа.
В большинстве случаев вы бы написали это, как указано выше - без указателей на типы интерфейса - но если вам нужно, вы можете заставить его скомпилироваться следующим образом:
type Slot struct {
name string;
stuff *Object;
}
func (p *printer) Init() {
var o Object = p;
p.slot = Slot{slotname, &o}; // offending line
}
Итак, p
- это объект, вам нужно взять адрес p, чтобы соответствовать спецификации *Object
.