46 lines
765 B
Go
46 lines
765 B
Go
package final
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type A struct {
|
|
tag string
|
|
t *testing.T
|
|
}
|
|
|
|
func NewA(tag string, t *testing.T) *A {
|
|
t.Log(tag, "init")
|
|
a := &A{tag: tag, t: t}
|
|
SetFinalizer(a)
|
|
return a
|
|
}
|
|
|
|
func (a *A) Finalizer() {
|
|
a.t.Log(a.tag, "final")
|
|
}
|
|
|
|
func function(t *testing.T) {
|
|
a := NewA("a in function", t)
|
|
_ = a
|
|
}
|
|
|
|
// $ go test -run=TestFinal -v
|
|
// === RUN TestFinal
|
|
// TestFinal: final_test.go:15: a init
|
|
// TestFinal: final_test.go:15: a in function init
|
|
// TestFinal: final_test.go:22: a in function final
|
|
// TestFinal: final_test.go:22: a final
|
|
// --- PASS: TestFinal (1.00s)
|
|
// PASS
|
|
func TestFinal(t *testing.T) {
|
|
a := NewA("a", t)
|
|
function(t)
|
|
_ = a
|
|
runtime.GC()
|
|
time.Sleep(1 * time.Second)
|
|
runtime.GC()
|
|
}
|