diff --git a/src/runtime/example_test.go b/src/runtime/example_test.go index eae9dbd7bf..8fa8122b00 100644 --- a/src/runtime/example_test.go +++ b/src/runtime/example_test.go @@ -6,6 +6,7 @@ package runtime_test import ( "fmt" + "os" "runtime" "strings" ) @@ -59,3 +60,36 @@ func ExampleFrames() { // - more:true | runtime_test.ExampleFrames.func3 // - more:true | runtime_test.ExampleFrames } + +func ExampleAddCleanup() { + tempFile, err := os.CreateTemp(os.TempDir(), "file.*") + if err != nil { + fmt.Println("failed to create temp file:", err) + return + } + + ch := make(chan struct{}) + + // Attach a cleanup function to the file object. + runtime.AddCleanup(&tempFile, func(fileName string) { + if err := os.Remove(fileName); err == nil { + fmt.Println("temp file has been removed") + } + ch <- struct{}{} + }, tempFile.Name()) + + if err := tempFile.Close(); err != nil { + fmt.Println("failed to close temp file:", err) + return + } + + // Run the garbage collector to reclaim unreachable objects + // and enqueue their cleanup functions. + runtime.GC() + + // Wait until cleanup function is done. + <-ch + + // Output: + // temp file has been removed +}