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 := <-ch
  fmt.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 Student
   fmt.Println(stu.Name)
   var stuP *Student
   
   stuP = &Student{} //如不进行赋值则会报错
   
   fmt.Println(stuP.Name)
}

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

发生空指针异常:

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

本期到此结束~

相关文章
|
1月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
219 4
|
3月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
321 0
|
1月前
|
JavaScript 前端开发 Java
【GoWails】Go做桌面应用开发?本篇文章带你上手Wails框架!一步步带你玩明白前后端双端的数据绑定!
wails是一个可以让你使用Go和Web技术编写桌面应用的项目 可以将它看作Go的快并且轻量级的Electron替代品。可以使用Go的功能,并结合现代化UI完成桌面应用程序的开发
397 4
|
1月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
156 1
|
3月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
286 1
|
3月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
360 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
233 0
|
3月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
212 0
|
3月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
305 0
|
网络协议 Linux Go
分享一个go开发的工具-SNMP Server
分享一个go开发的工具-SNMP Server
380 0