You can modify the state by using named return values.
func ContrivedExample() (file *os.File, err error) {
file, err = os.Open("something.txt")
defer func() {
if err = file.Close(); err != nil {
file = nil
}
}()
return
}