У вас есть *interface {}
, и вы хотите сделать вид, что это *int
! Как это будет работать?
package main
import (
"fmt"
"unsafe"
)
func main() {
var cr creator
pointer := cr.CreateInt()
fmt.Printf("%T\n", pointer) // *int
}
type creator struct {
buf []interface{}
}
func (cr *creator) Create() *interface{} {
if len(cr.buf) == 0 {
cr.buf = make([]interface{}, 256)
}
current := &cr.buf[0]
cr.buf = cr.buf[1:]
return current
}
func (cr *creator) CreateInt() *int {
pointer := cr.Create()
fmt.Printf("%T\n", pointer) // *interface {}
return (*int)(unsafe.Pointer(pointer)) // *interface {} to *int
}
Детская площадка: https://play.golang.org/p/TLF7kbYPA0M
Выход:
*interface {} 0x452000
*int 0x452000