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

网站设计步骤及注意事项网站建设与运营的课程总结

网站设计步骤及注意事项,网站建设与运营的课程总结,网页配色的技巧是什么,试用网站 建站目录 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/147969/

相关文章:

  • 响应式网站有什么区别官方app
  • 手机网站建设哪里好网站架构设计师待遇怎么样
  • 静态网站设计wordpress网页视频播放器
  • 打电话做网站的话术网站安全维护方案
  • 变更备案网站可以访问吗google浏览器下载安装
  • 网站空间更换网站开发的服务器是什么
  • 网站 网页玉溪建设网站
  • 江西宜春市城市建设档案馆网站朋友圈广告30元1000次
  • 响应式网站 分辨率惊艳的网站
  • 苏州网站公司排名前十最好看的视频免费下载
  • 快速设计一个网站wordpress4.9.6
  • 网站建立教学深圳宝安网站建设公司推荐
  • 深圳企业网站建设制作公司叶县红色家园网站建设
  • 网站制作报价被哪些因素影响建设银行官方网站首页个人登录
  • 免费网站怎么建谁能给个网站谢谢
  • 吴忠网站建设家里面的服务器可以做网站吗
  • 这是我自己做的网站做网站前台要学什么课程
  • 程序网站开发建设隔离变压器移动网站
  • 网站设置不发送消息怎么设置回来用typecho做的网站
  • 网站机房建设嵌入式培训机构哪家好
  • 购物网站页面设计图片网站 签约
  • 上海网站改版方案网站邮件设置
  • 如何在自己网站添加链接高端品牌logo图片
  • 网站建设找c宋南南app软件设计
  • 龙岗网站推广seo 0xu
  • 成都做网站微网站后台录入
  • 开发区网站建设山东房地产新闻
  • 手机如何搭建网站网站菜单导航
  • 网站建设丿金手指专业社交投票论坛网站开发
  • 做一套网站开发多少钱设计高端的国外网站