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

怎么免费建立网店网站网站建设和网络推广

怎么免费建立网店网站,网站建设和网络推广,自己做名片的网站,wordpress注册跳过邮箱验证目录 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.huolong8.cn/news/34681/

相关文章:

  • 如何做网校网站seo网络推广软件
  • 济南市做网站公司烟台酒店网站建设
  • 做响应式网站的菜单栏做哪个视频网站赚钱的
  • 简单的电商网站开发老牛wordpress
  • 网站邮件发送功能怎么做20亿做网站
  • 出境旅游哪个网站做的好想做一个自己的网站 怎么做
  • 校园网站建设方案模板ui设计和网站开发
  • dedecms妇科医院wap网站模板 v1.0服装商城的网站策划书
  • 网站平台建设工作汇报想给公司注册一个网站
  • 网站正在建设中怎么办深圳人才网站建设
  • 鼓楼网站开发wordpress 主页幻灯片
  • 网站开发 设计文档h5直播视频接入
  • 李沧网站建设电话服装网站建设规划书怎么写
  • 重庆璧山网站建设活动策划网站
  • 忻州建设厅官方网站腾讯邮箱邮箱入口
  • 石景山建网站网站开发合同书
  • 网站开发公司东莞9277在线观看最新资源
  • 长春火车站咨询电话号码是多少网站建设费可以计入管理费用吗
  • 餐饮网站界面网络营销的发展现状及趋势
  • 网站服务器建设电商商城系统免费
  • 自己做网站 有名网站空间需要备案吗
  • 汕头网站建设公司有哪些wordpress 嵌入 php
  • 张家港网站建设服务石家庄网站建设教程
  • 昆山网站建设多少钱室内装修设计学校哪里好
  • 青岛网站建设找网站备案率是什么
  • 网站建设项目确认书qq推广方法
  • 西安网站设计怎么自己建立一个网站后台
  • 电子商务建设网站西安做网站公司哪家好
  • 网站建设捌金手指花总十三网站开发及运营成本
  • 客户为什么需要建站服务如何设立邮箱和网站