Canonical guidance

Use when

Avoid

Preferred pattern

f, err := os.Open(name)
if err != nil {
	return err
}
defer f.Close()

Anti-pattern

for _, name := range names {
	f, _ := os.Open(name)
	defer f.Close()
}

Explanation: This anti-pattern is common because defer is concise, but in loops it can keep files or locks alive far longer than intended.

Why

Sources