Пробую написать первый хеловорлд на Го. И хочу сделать каст в/из unsafe указателя. Делаю так:
package main
import (
"unsafe"
)
type I interface {
GetX() int
}
type A struct {
x int
}
type B struct {
x int
y int
}
func (self *A) GetX() int {
return self.x
}
func (self *B) GetX() int {
return self.x
}
func main() {
a := A{x: 17}
b := B{x: 42, y: -1}
var i I
p := unsafe.Pointer(&a)
i = I(p) // ошибка 1
p = unsafe.Pointer(&b)
i = I(p) // ошибка 2
}
Компиляция выдает:
.\main.go:35: cannot convert p (type unsafe.Pointer) to type I: unsafe.Pointer does not implement I (missing GetX method)
.\main.go:38: cannot convert p (type unsafe.Pointer) to type I: unsafe.Pointer does not implement I (missing GetX method)
А как сделать каст правильно из unsafe указателя на интерфейс?