Use defer to clean up even when errors occur:
func process() error {
f, err := os.Create("temp.txt")
if err != nil {
return err
}
defer func() {
f.Close()
os.Remove(f.Name())
}()
// Work with file...
return nil
}
Defer runs regardless of how the function exits. This ensures cleanup happens.