go语言学习笔记:Deferred函数
defer关键字后面跟的函数会推迟到函数结束时候调用,这个太厉害了。这可以让我们无需多次调用close、free之类的函数,并且保证他们不会漏执行。
package ioutil func ReadFile(filename string) ([]byte, error) { f, err := os.Open(filename) if err != nil { return nil, err } defer f.Close() return ReadAll(f) }
var mu sync.Mutex var m = make(map[string]int) func lookup(key string) int { mu.Lock() defer mu.Unlock() return m[key] }
func title(url string) error { resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() //会被推迟到title函数结束时候调用 ------ }