34 lines
442 B
Go
34 lines
442 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
"time"
|
|
"unsafe"
|
|
)
|
|
|
|
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)
|
|
})
|
|
|
|
return data
|
|
}
|
|
|
|
func main() {
|
|
data := NewData("__data__")
|
|
_ = data
|
|
|
|
runtime.GC()
|
|
time.Sleep(time.Second)
|
|
}
|