包含标签 GoStudy 的文章

Go总结(二十二)| panic异常处理

error和panic 错误 和 异常 是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。 但事实并非如此就好。众所周知,Golang 遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。 错误指 ………

阅读全文

Go总结(二十一)| JSON处理

现在的Web应用,几乎都是采用JSON格式进行数据交互。 Go语言内建对JSON的支持。使用Go语言内置的encoding/json标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。在Go语言实现JSON的编码和解码时,遵循RFC4627协议标准。深入理解Go是如何编码解码JSON格式数据非常有必要。 编码为JSON格式 解 ………

阅读全文

Go总结(二十)| 强大的runtime包

runtime包提供了运行时与系统的交互,比如控制协程函数,触发垃圾立即回收等等底层操作,下面我们就运行时能做的所有事情逐个进行说明: 1.获取GOROOT环境变量 2.获取GO的版本号 3.获取本机CPU个数 4.设置最大可同时执行的最大CPU数 5.设置cup profile 记录的速录 6.查看cup profile 下一次堆栈跟踪 ………

阅读全文

Go总结(十八)| pprof性能分析

Go语言提供了很多性能分析的工具,性能分析类型有如下几种: CPU性能分析 内存性能分析 阻塞性能分析 锁性能分析 CPU性能分析 生成profile文件 Go 的运行时性能分析接口都位于 runtime/pprof 包中。只需要调用 runtime/pprof 库即可得到我们想要的数据。 看下面的例子,随机生成了 5 组数据,并且使用冒 ………

阅读全文

Go总结(十七)| 反射(reflect)

Go语言反射特性(reflect)提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率,但通常降低运行效率。 Go语言中的反射 Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和变量支持的内在操作,但是在编译时并不知道这些变量的具体类型,这种机制被称为反射。反射也可以让我们将类 ………

阅读全文

Go总结(十六)| 自定义Log日志

开发软件日志很重要,不管是应用的标准输出信息,还是主动打印的日志,还是被动的异常信息;都有被记录和整理的需求。大数据从哪里来,很多时候其实是从日志中来的。日志很重要,Go标准库也为日志输出内置了大量实用方法。 标准配置 标准库就提供了这些参数,按需要配置就好了: 1 2 3 4 5 6 7 8 9 10 const ( Ldate = 1 ………

阅读全文

Go总结(十五)| Runner、Pool、Work简介

前面我们学习了并发以及解决并发的常用方式;今天我们看看Go语言实现的三种常用并发模式;这些模式可以在实际生产应用中合理使用,免去了我们造轮子的过程。 我们说过通道的性能并不是太好,这个在大批量循环处理的时候的确有些问题。性能不是关键诉求的场景下还是可以的,他能简化编程。这里讲的三种并发模式,都需要结合使用通道和协程。 Runner 下面给 ………

阅读全文

Go总结(十四)| Atomic、Mutex、Channel比较

第九篇文章我们学习了Go解决并发编程问题的三种方式。归根结底都是采用加锁,让并发变成同步访问。那么这些处理方式性能如何呢? 先介绍一个Linux下面统计时间的命令time,具体可以参考:https://www.runoob.com/linux/linux-comm-time.html 这里做一个测试,启动两个协程,一个对数执行++操作,一 ………

阅读全文

Go总结(十三)| 单元测试

Go语言SDK内置了很多实用的工具,默认自带了单元测试、基准测试命令;今天我们来看看如何做好单元测试。 什么是单元测试 百度百科:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软 ………

阅读全文