往期回顾:

  • Go语言开发小技巧&易错点100例(一)
  • Go语言开发小技巧&易错点100例(二)
  • Go语言开发小技巧&易错点100例(三)
  • Go语言开发小技巧&易错点100例(四)
  • Go语言开发小技巧&易错点100例(五)
  • Go语言开发小技巧&易错点100例(六)

本期看点(技巧类用【技】表示,易错点用【易】表示)

  • 优雅的关闭Go程序【技】
  • 指针声明后未赋值前不能直接操作【易】

正文开始

优雅的关闭Go程序【技】

在实际的开发中你可能会遇到这样的问题,程序异常终止但自己却浑然不知,程序关闭前消息队列还有部分未消费等等,所以程序不能异常终止,我们可以选择更加优雅的方式进行程序的关闭,话不多说直接上代码:

func main() {defer func() {fmt.Println("defer func ...")}()fmt.Println("main func ...")ch := make(chan os.Signal, 1)signal.Notify(ch, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT)sig := <-chfmt.Printf("get signal %+v ...\n", sig)
}

大家可以先猜猜看这个main函数的执行顺序,没错,只会输出main func ...

但是在按Ctrl+C或关闭程序时就会输出如下:

因此大家就可以将程序退出前想要执行的函数放在defer函数中或者放在<-ch后,已达到在程序终止前执行一些必要的程序。

指针声明后未赋值前不能直接操作【易】

Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。关于值传递和引用传递大家可以参考我的这篇文章:《细说值传递、引用传递和地址传递》。

Go语言中的指针操作非常简单:&(取地址)和*(根据地址取值)。我们在声明一个指针时可以有两种方式:

  • var stu *Student

  • stu := &Student{}

代码实例:

type Student struct {Name string
}func main() {var stu Studentfmt.Println(stu.Name)var stuP *StudentstuP = &Student{} //如不进行赋值则会报错fmt.Println(stuP.Name)
}

如果不进行赋值IDE则会进行提示:

发生空指针异常:

所以大家平时要注意指针变量的使用哈。

本期到此结束~

Go语言开发小技巧易错点100例(七)相关推荐

  1. 嵌入式C语言优化小技巧

    嵌入式C语言优化小技巧 1 概述 嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高,响应速度快等优点,目前已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环境的 ...

  2. 摘《阿里巴巴JAVA开发手册》易错题目

    Apsara Clouder基础技能认证:阿里巴巴编码规范 摘<阿里巴巴JAVA开发手册>的小部分易错题目 下面的例子代码和描述,哪些是不正确的: [ABD] A. 单行字符数限制不超过1 ...

  3. 27个iOS开发小技巧

    <span style="word-wrap: normal; word-break: normal; line-height: 1.5em; font-size: 14px; out ...

  4. 日常安排php,PHP日常开发小技巧

    PHP日常开发小技巧 导语:PHP语言中,如果你懂得一些开发技巧,那么对你学PHP,会有很大的帮助.下面的是百分网小编为大家整理的PHP日常开发小技巧,希望对你能有所帮助. PHP批量取得checkb ...

  5. Silverlight 游戏开发小技巧:动感小菜单2

    Silverlight 游戏开发小技巧:动感小菜单2 动感小菜单其实是想模仿Apple的菜单按钮设计制作,但是画虎不成反类犬,看起来有点别扭,昨天各位园友提了这方面的建议,感觉太硬如果加入动画可能更好 ...

  6. Silve“.NET研究”rlight 游戏开发小技巧:传说中的透视跑马灯

    昨夜元宵佳节,各种灯会热闹非凡,伴随烟火灿烂好不热闹,可惜一点也没看着T_T,那就写一个跑马灯吧,可是跑马灯并不稀奇,各位高手们已经写过而且都各有特点,所以,写也要写点有特色的才好,游戏中经常能看到一 ...

  7. 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单

    网页应用受限于自身的浏览器范畴,不能把华丽效果完全展示,正是因为如此,在网页上诞生了无数绚丽的设计,虽然动感程度和桌面应用无法比拟,但是在UI上却下足了功夫,用户体验可以说无以伦比,比如说小小的菜单, ...

  8. Silverlight 游戏开发小技巧:轨迹跟随效果

    Silverlight 游戏开发小技巧:轨迹跟随效果 我们通常在游戏中有各种各样的粒子效果,其中有一种就是跟随鼠标发生的轨迹动画,在鼠标经过的地方会产生一些特效,这种方式我们在粒子当中经常使用,本篇使 ...

  9. Delphi三层开发小技巧:TClientDataSet的Delta妙用

    Delphi三层开发小技巧:TClientDataSet的Delta妙用 Delphi做三层开发时,很多人都会在客户端放一个TClientDataSet,中间层远程数据模块就对应放一个TDataSet ...

最新文章

  1. XML简单的增改删操作
  2. threadlocal使用场景_深入剖析ThreadLocal
  3. Jquery操作下拉列表和复选框,自定义下拉
  4. Qt 原理-MOC(1)Meta Object Compiler
  5. 初学计算几何(四)——初识凸包
  6. 【微信小程序】二维码跳转规则的前缀匹配是什么意思?
  7. 按一行一行的方法将一个文本文件复制到另一个文件中_命令行技巧:分割文件内容...
  8. YBTOJ:卖猪问题(网络流)
  9. java支持闭包_JAVA 需要引入闭包吗
  10. TCP/IP参考模型和五层参考模型
  11. cs231n 作业环境搭建
  12. android 自定义 对号,超简单实现Android自定义Toast
  13. Detecting Causality in Complex Ecosystems(检测复杂生态系统中的因果关系)
  14. 遗传算法python与matlab_遗传算法之Python实现代码
  15. Code Craft(编程匠艺)之代码的生命(一)
  16. 【入门讲解】Python使用OpenCV设置图片尺寸。
  17. Android自定义守望先锋loading学习
  18. 可以储存照片的字段类型是_在数据库中可用来存储图片的字段对象是哪种类型的字段?...
  19. APK获取包名的办法
  20. 【随机过程】第二版龚光鲁译课后习题4.5参考答案

热门文章

  1. vue+video-player组件应用
  2. java狼追着羊跑的程序_Java编程能力强化——狼羊过河问题
  3. 图片旋转之二-transition动画
  4. SQL函数的自定义和调用
  5. 请问任务管理器GPU里的copy是啥?
  6. 2013年各大小IT公司待遇,绝对真实,一线数据!(转好网)
  7. linux 查找文件夹命令_如何从命令行在Linux中查找文件,文件夹和目录?
  8. AVA数据集论文1705.08421部分翻译
  9. 关于hadoop集群搭建后,访问Browse Directory目录的权限问题
  10. 抖音是怎么做到不重复推荐内容呢?