37 lines
559 B
Go
37 lines
559 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"time"
|
|
)
|
|
|
|
type FileWrapper struct {
|
|
file *os.File
|
|
}
|
|
|
|
func NewFileWrapper(path string) *FileWrapper {
|
|
file, _ := os.OpenFile(path, os.O_RDONLY|os.O_CREATE, 0666)
|
|
|
|
ptr := &FileWrapper{file: file}
|
|
|
|
runtime.AddCleanup(ptr, func(f *os.File) { // replace with FileWrapper
|
|
fmt.Println("Closing file:", f.Name())
|
|
_ = f.Close()
|
|
}, ptr.file)
|
|
|
|
return ptr
|
|
}
|
|
|
|
func main() {
|
|
obj := NewFileWrapper(os.DevNull)
|
|
_ = obj
|
|
obj = nil
|
|
|
|
runtime.GC()
|
|
time.Sleep(time.Second)
|
|
|
|
fmt.Println("Object is collected by GC")
|
|
}
|