Files

39 lines
573 B
Go

package main
import (
"fmt"
"runtime"
"time"
"unsafe"
)
var globalData *Data
type Data struct {
name string
}
func NewData(name string) *Data {
data := &Data{
name: name,
}
fmt.Println("created", name)
runtime.SetFinalizer(data, func(ptr *Data) {
fmt.Println("finalizer called on addr", unsafe.Pointer(ptr), "value is", ptr.name)
globalData = ptr
})
return data
}
func main() {
data := NewData("data")
_ = data
runtime.GC()
time.Sleep(time.Second)
fmt.Println("resurrected on addr", unsafe.Pointer(globalData), "value is", globalData.name)
}