2023年3月28日
参考阅读: https://new.qq.com/rain/a/20210723A029CK00 https://github.com/preytaren/go-doc-zh (完)……
阅读全文
2023年2月16日
很多时候我们需要用到定时器,比如定期执行一段逻辑。Go语言中用到最多无外乎几种: time.Sleep() time.NewTimer() time.After() time.NewTicker() 这三种底层逻辑都是相通的。具体看网上的介绍。 Sleep和NewTimer 这两个方法类似,你可能会发现NewTimer的实现是放 ………
阅读全文
2021年8月19日
error和panic 错误 和 异常 是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。 但事实并非如此就好。众所周知,Golang 遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。 错误指 ………
阅读全文
2021年6月23日
现在的Web应用,几乎都是采用JSON格式进行数据交互。 Go语言内建对JSON的支持。使用Go语言内置的encoding/json标准库,开发者可以轻松使用Go程序生成和解析JSON格式的数据。在Go语言实现JSON的编码和解码时,遵循RFC4627协议标准。深入理解Go是如何编码解码JSON格式数据非常有必要。 JSON规范 JSON ………
阅读全文
2021年2月5日
runtime包提供了运行时与系统的交互,比如控制协程函数,触发垃圾立即回收等等底层操作,下面我们就运行时能做的所有事情逐个进行说明: 1.获取GOROOT环境变量 2.获取GO的版本号 3.获取本机CPU个数 4.设置最大可同时执行的最大CPU数 5.设置cup profile 记录的速录 6.查看cup profile 下一次堆栈跟踪 ………
阅读全文
2021年2月3日
控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context。 WaitGroup 直接看例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 func main() { var wg sync.WaitGroup wg.Add(2) go func() { time.Sleep(2 ………
阅读全文
2021年1月23日
Go语言提供了很多性能分析的工具,性能分析类型有如下几种: CPU性能分析 内存性能分析 阻塞性能分析 锁性能分析 CPU性能分析 生成profile文件 Go 的运行时性能分析接口都位于 runtime/pprof 包中。只需要调用 runtime/pprof 库即可得到我们想要的数据。 看下面的例子,随机生成了 5 组数据,并且使用冒 ………
阅读全文
2021年1月23日
Go语言反射特性(reflect)提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率,但通常降低运行效率。 Go语言中的反射 Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和变量支持的内在操作,但是在编译时并不知道这些变量的具体类型,这种机制被称为反射。反射也可以让我们将类 ………
阅读全文
2021年1月19日
开发软件日志很重要,不管是应用的标准输出信息,还是主动打印的日志,还是被动的异常信息;都有被记录和整理的需求。大数据从哪里来,很多时候其实是从日志中来的。日志很重要,Go标准库也为日志输出内置了大量实用方法。 标准配置 标准库就提供了这些参数,按需要配置就好了: 1 2 3 4 5 6 7 8 9 10 const ( Ldate = 1 ………
阅读全文
2021年1月12日
前面我们学习了并发以及解决并发的常用方式;今天我们看看Go语言实现的三种常用并发模式;这些模式可以在实际生产应用中合理使用,免去了我们造轮子的过程。 我们说过通道的性能并不是太好,这个在大批量循环处理的时候的确有些问题。性能不是关键诉求的场景下还是可以的,他能简化编程。这里讲的三种并发模式,都需要结合使用通道和协程。 Runner 下面给 ………
阅读全文