GO关键字 defer、panic

131 阅读1分钟

defer语句中的函数会在return语句更新返回值变量后再执行,被延迟执行的匿名函数甚至可以修改函数返回给调用者的返回值:

\

golang的io.copy使用


CopyN(dst,src,n) 为复制src 中 n 个字节到 dst。

Copy(dst,src) 为复制src 全部到 dst 中。

CopyBuffer(dst,src,buf)为指定一个buf缓存区,以这个大小完全复制。

普通的读和写的方法在复制小文件的时候没什么问题,复制大文件的时候容易造成内存泄漏 使用copy方法固定的buffer,方便大文件的复制,不会造成内存泄漏

如果某个值不被使用,可以将其分配给blank identifier:

links, _ := findLinks(url) // errors ignored

panic 被用来代表某些可以预期的错误,如IO错误。一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)

任何进行I/O操作的函数都会面临出现错误的可能,对于那些将运行失败看作是预期结果的函数,它们会返回一个额外的返回值,通常是最后一个,来传递错误信息。如果导致失败的原因只有一个,额外的返回值可以是一个布尔值,通常被命名为ok。 内置的error是接口类型。error类型可能是nil或者non-nil。nil意味着函数运行成功,non-nil表示失败。对于non-nil的error类型,我们可以通过调用error的Error函数或者输出函数获得字符串类型的错误信息