首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go语言开发小技巧&易错点100例(七)

Go语言开发小技巧&易错点100例(七)

原创
作者头像
闫同学
发布2023-09-30 21:19:00
发布2023-09-30 21:19:00
2400
举报
文章被收录于专栏:扯编程的淡扯编程的淡

往期回顾:

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

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

正文开始

优雅的关闭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 := <-ch

	fmt.Printf("get signal %+v ...\n", sig)
}

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YRodrkz-1683035123138)(Go语言开发小技巧&易错点100例(七).assets/image-20230502092348213.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YRodrkz-1683035123138)(Go语言开发小技巧&易错点100例(七).assets/image-20230502092348213.png)]

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

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

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

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

  • var stu *Student
  • stu := &Student{}

代码实例:

代码语言:go
复制
type Student struct {
   Name string
}

func main() {
   var stu Student
   fmt.Println(stu.Name)

   var stuP *Student
   
   stuP = &Student{} //如不进行赋值则会报错
   
   fmt.Println(stuP.Name)
}

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4xIax9P-1683035123140)(Go语言开发小技巧&易错点100例(七).assets/image-20230502092731182.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4xIax9P-1683035123140)(Go语言开发小技巧&易错点100例(七).assets/image-20230502092731182.png)]

发生空指针异常:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Duenc5JR-1683035123141)(Go语言开发小技巧&易错点100例(七).assets/image-20230502092743744.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Duenc5JR-1683035123141)(Go语言开发小技巧&易错点100例(七).assets/image-20230502092743744.png)]

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

本期到此结束~

本期到此结束~

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优雅的关闭Go程序【技】
  • 指针声明后未赋值前不能直接操作【易】
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档