当前位置: 首页 > news >正文

学做网站论坛vip共享前端开发培训中心

学做网站论坛vip共享,前端开发培训中心,长沙品牌设计公司都有哪些,网络推广优化平台目录 1、资源释放 2、异常捕获 3、参数的预计算 4、defer 返回值的陷阱 1、资源释放 下面是一个简单的读取文件的程序#xff0c;os.Open 打开文件资源描述符#xff0c;在读取文件后#xff0c;需要释放资源。但是在错误的时候#xff0c;程序就直接返回那么#xf…目录 1、资源释放 2、异常捕获 3、参数的预计算 4、defer 返回值的陷阱 1、资源释放 下面是一个简单的读取文件的程序os.Open 打开文件资源描述符在读取文件后需要释放资源。但是在错误的时候程序就直接返回那么资源就得不到释放 func ReadFile(Filename string) ([]byte, error) {file, err : os.Open(Filename)if err ! nil {return nil, err}stat, err : file.Stat()if err ! nil {return nil, err}var re make([]byte, stat.Size())_, err file.Read(re)if err!nil{return nil,err}file.Close()if err ! nil {return nil, err}return re, nil ​ } 那么程序需要就需要修改为在所有err 的地方都需要释放资源 file, err : os.Open(Filename) if err ! nil {file.Close()return nil, err }stat, err : file.Stat()if err ! nil {file.Close()return nil, err}var re make([]byte, stat.Size())_, err file.Read(re)if err ! nil {file.Close()return nil, err} 但是这样处理很不优雅而且很容易漏掉那么我们就可以利用defer 的延迟调用,程序结束的时候释放资源,能减少大量冗余代码避免由于忘记释放资源而产生的错误 func ReadFile(Filename string) ([]byte, error) {file, err : os.Open(Filename)defer file.Close()if err ! nil {return nil, err}stat, err : file.Stat()if err ! nil {return nil, err}var re make([]byte, stat.Size())_, err file.Read(re)if err ! nil {return nil, err}if err ! nil {return nil, err}return re, nil ​ } 2、异常捕获 避免程序因为panic 异常退出可以通过defer函数中使用recover进行异常捕获程序就不会异常退出main的 fmt.Println 可以打印 func ReadFile(Filename string) ([]byte, error) {file, err : os.Open(Filename)defer file.Close()if err ! nil {return nil, err}stat, err : file.Stat()if err ! nil {return nil, err}var re make([]byte, stat.Size())_, err file.Read(re)if err ! nil {return nil, err}if err ! nil {return nil, err}return re, nil ​ } 3、参数的预计算 传递到defer 中的函数参数是预执行的因此在执行 defer 语句时执行了a1并将其保留下来只到函数执行完后才执行 defer 函数体内的语句。 func main() {a : 1defer func(b int) {fmt.Println(b)}(a 1)a 100 } 4、defer 返回值的陷阱 有返回值时时先执行defer 还是先执行 return 具体情况具体分析先看几个例子 var g 100 func gf() (r int) {defer func() {g 200}()fmt.Printf(g:%d\n, g)return g } ​ func main() {i : gf()fmt.Println(i)fmt.Println(g) } ​ g:100 100 200 ​ 从返回结果看好像是先执行了return 在执行了 defer 那么下面的程序 var g 100 ​ func gf() (r int) {r gdefer func() {r 200}()r 0return r } ​ func main() {i : gf()fmt.Println(i)fmt.Println(g) } 返回结构 200 100 从返回结果好像是先执行了defer 后执行了 return 那么为什么会这样呢原因是return 不是一个原子操作包含了下面几步 将返回值保存在栈上-执行defer 函数-函数返回 对于第一个例子 g100 rg g200 return 对于第二个例子 g100 rg g200 return
http://www.zqtcl.cn/news/163376/

相关文章:

  • 网站引量方法网站建设推广页
  • 书店网站的建设网络营销方法有哪些
  • 深圳网站优化软件顺企网怎么样
  • 做网站的需要什么要求中国五百强企业排名表
  • 网络营销 企业网站外贸响应式网站建设
  • 网站网页制作公司o2o平台是什么意思啊
  • 惠州市网站建设个人网站怎么进入后台维护
  • 微信网站链接怎么做wordpress 绑定手机版
  • 网站建设的内容是什么在线阅读小说网站怎么建设
  • 福州网站开发哪家比较好建设网站需要掌握什么编程语言
  • 邹平做网站的公司莱芜人才网莱芜招聘
  • 旅行网站开发意义怎样优化网络速度
  • 手机微网站建设多少钱拟定网络设计方案
  • 厦门制作公司网站安卓原生app开发工具
  • worldpress英文网站建设wordpress输出外部文章
  • u9u8网站建设商业公司的域名
  • 有学给宝宝做衣服的网站吗防网站黑客
  • 十大搜索引擎网站微信小程序有什么用处?
  • 团购网站 seo烟台网站建设方案优化
  • 公司网站建设招标文件范本公益永久免费主机
  • 建设银行网站查询企业年金五合一免费建站
  • 做网站开发挣钱吗做网站手机版
  • 网站建设案例精粹 电子书广州白云学校网站建设
  • 良品铺子网站制作用什么软件来做网站
  • ip直接访问网站 备案哪有深圳设计公司
  • 平面构成作品网站第一设计
  • 济南小程序开发多少钱网站移动端优化工具
  • 大连开发区网站淘宝网站优化实例
  • 张家港建网站的公司做网站犯法了 程序员有责任吗
  • 小型企业网站建设项目浦东新区网站推广公司