网站首页 返回列表 “慢生活”不是懒惰,放慢速度不是拖延时间,而是让我们在生活中寻找到平衡。
GO——学习笔记(九):并发
上篇:下篇:参考:[https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.7.md](https://link.jianshu.com?t=https://github.com/astaxie/build-web-a...
阅读全文
从小案例学习Go语言-将Excel各部分内容分发到不同的电子邮箱
关键点:*Go语言读取Excel*Go语言正则表达式*Go语言发送电子邮件案例场景今天公司行政部小妹妹跑来问,有什么办法可以把工资条自动发送到每个员工的企业邮箱里?公司每个员工的工资条以Excel的形式放在同一个文档里,之前用OA发送,复制粘贴,操作相当简单,但是公司要求改用电子邮件发送工资条后,给行政部的同事增加了较...
阅读全文
高效的Go语言编码技巧
http://dawngrp.com/gao-xiao-de-goyu-yan-bian-ma-ji-qiao/1.不要使用+和fmt.Sprintf操作字符串+操作字符串很方便,但是真的很慢,在Go语言里使用+会导致你的程序跑得可能比脚本语言还满,不相信的可以自己做个测试,用+操作,迭代十万次,Python、Java...
阅读全文
Go 性能优化技巧 10/10
垃圾回收不是万能的,Go一样存在资源泄露问题。1SetFinalizer虽然垃圾回收器能很好地处理循环引用,可一旦加上SetFinalizer,事情就不那么美妙了。显然,这些对象并未被释放。在标准库文档里有这样的描述:>Finalizersarerunindependencyorder:ifApointsatB,bot...
阅读全文
Go: Readonly Variable
只读变量的缺失,应该算Go语言“设计缺陷”。举例来说,默认以error实例来判断错误类别,但这些可导出全局变量实际可被外部修改,那么就存在隐性风险。在实际开发中,有很多需设置访问权限的内存敏感数据,包括只读、只写,或不可操作等,好在可借助syscall实现。使用示例:当然,可以在此基础上实现更多功能,基本原理类似。对于...
阅读全文
Go性能优化技巧 1/10
字符串(string)作为一种不可变类型,在与字节数组(slice,[]byte)转换时需付出“沉重”代价,根本原因是对底层字节数组的复制。这种代价会在以万为单位的高并发压力下迅速放大,所以对它的优化常变成“必须”行为。首先,须了解string和[]byte数据结构,并确认默认方式的复制行为。>动态演示:https:/...
阅读全文
GO——学习笔记(十):搭建简单的Web服务器
上篇:下篇:参考:[https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/03.2.md](https://link.jianshu.com?t=https://github.com/astaxie/build-web-a...
阅读全文
go语言strings库总结
最近由于用go做字符串处理,用到了go的strings库,借此对gostrings库做个总结,将gostrings中所有函数的功能做一个简单的说明,当然,这是一个重复造轮子的过程,因为go语言标准库已经有中文版了。详见:所以写本文主要有以下2个目的,其一,熟悉编程语言字符串处理方法。大多数语言的字符串处理库提供的函数都...
阅读全文
Go 性能优化技巧 2/10
对于一些初学者,自知道Go里面的array以pass-by-value方式传递后,就莫名地引起“恐慌”。外加诸多文章未作说明,就建议用slice代替array,企图避免数据拷贝,提升性能。实际上,此做法有待商榷。某些时候怕会适得其反,倒造成不必要的性能损失。用个简单的示例说明。代码很简单,两个函数分别返回“内容相同”的...
阅读全文
Go 性能优化技巧 3/10
内置map类型是必须的。首先,该类型使用频率很高;其次,可借助runtime实现深层次优化(比如说字符串转换,以及GC扫描等)。可尽管如此,也不意味着万事大吉,依旧有很多需特别注意的地方。1预设容量map会按需扩张,但须付出数据拷贝和重新哈希成本。如有可能,应尽可能预设足够容量空间,避免此类行为发生。从结果看,预设容量...
阅读全文
Go 性能优化技巧 4/10
延迟调用(defer)确实是一种“优雅”机制。可简化代码,并确保即便发生panic依然会被执行。如将panic/recover比作try/except,那么defer似乎可看做finally。如同异常保护被滥用一样,defer被无限制使用的例子比比皆是。只需稍稍了解defer实现机制,就不难理解会有这样的性能差异。编译...
阅读全文
Go 性能优化技巧 5/10
闭包(closure)也是很常见的编码模式,因它隐式携带上下文环境变量,因此可让算法代码变得更加简洁。但任何“便利”和“优雅”的背后,往往都是更复杂的实现机制,无非是语法糖或编译器隐藏了相关细节。最终,这些都会变成额外成本在运行期由CPU、runtime负担。甚至因不合理使用,造成性能问题。用几个代码片段看看可能的麻烦...
阅读全文
Go 性能优化技巧 6/10
Go使用channel实现CSP模型。处理双方仅关注通道和数据本身,无需理会对方身份和数量,以此实现结构性解耦。在各文宣中都有“Don'tcommunicatebysharingmemory,sharememorybycommunicating.”这类说法。但这并非鼓励我们不分场合,教条地使用channel。在我看来,...
阅读全文
Go 性能优化技巧 7/10
接口的用途无需多言。但这并不意味着可在任何场合使用接口,要知道通过接口调用和普通调用存在很大差别。首先,相比静态绑定,动态绑定性能要差很多;其次,运行期需额外开销,比如接口会复制对象,哪怕仅是个指针,也会在堆上增加一个需GC处理的目标。显然,对于压力很大的内部组件之间,用接口有些得不偿失。对比接口调用和普通调用的汇编指...
阅读全文
Go 性能优化技巧 8/10
尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足。只是某些时候,我们须对此做些变通,以提升性能。为便于阅读,以下示例均做了最大程度精简。如果是reflect.Type,可将其缓存,避免重复操作耗时。但Value显然不行,因为它和具体对象绑定,内部存储实例指针。换个思路,字段相对...
阅读全文