sync.Once用于保证某个动作只被执行一次,可用于单例模式中,比如初始化配置。我们知道init()函数也只会执行一次,不过它是在main()函数之前执行,如果想要在代码执行过程中只运行某个动作一次,可以使用sync.Once,下面来介绍一下它的使用方法。
VBSscript实现后台运行Windows bat脚本
VBScript 是Visual Basic 语言的轻量级版本,本文介绍使用VBS实现在后台运行bat脚本。
读书笔记 | 助推
《助推》是诺贝尔经济学奖得主理查德·塞勒的著作,副标题为“如何做出有关健康、财富与幸福的最佳决策”,由于我们可能无法做出完全理性的选择,通过使用助推,可以引导人们做出更好的选择。任何能够显著改变社会人行为的因素都可以被称为“助推”。
iOS APP自动化:class chain定位方法
在iOS APP自动化:predicate定位中介绍了iOS APP的predicate定位方法,本文介绍与XPath语法比较类似的class chain定位方法。
Go语言并发编程:互斥锁
在并发编程中,多个Goroutine访问同一块内存资源时可能会出现竞态条件,我们需要在临界区中使用适当的同步操作来以避免竞态条件。Go 语言中提供了很多同步工具,本文将介绍互斥锁Mutex和读写锁RWMutex的使用方法。
Go语言基础语法(三):结构体及方法
结构体类型可以用来保存不同类型的数据,也可以通过方法的形式来声明它的行为。本文将介绍go语言中的结构体和方法,以及“继承”的实现方法。
使用GitHub Actions实现Hexo博客自动发布
我在使用jenkins实现hexo博客自动发布中介绍了可以使用jenkins实现博客自动发布,其实还有一种更简单的方法,就是GitHub提供的持续集成服务:GitHub Actions。下面就来介绍一下如何使用GitHub Actions来实现将hexo博客自动编译及发布到GitHub Pages和Gitee pages上。
Linux Bash编程:Fisher–Yates shuffle 洗牌算法
本文介绍使用shell语法来实现Fisher–Yates shuffle 洗牌算法。
Go语言并发编程:原子操作
在程序执行过程中,操作系统会进行线程调度,同一时刻能同时执行的程序数量跟CPU的内核线程数有关,比如4核CPU,同时最多只能有4个线程。Go 语言中的运行时系统也会对goroutine进行调度,调度器会频繁地让goroutine处于中断或者运行状态,这就不能保证代码执行的原子性(atomicity),即使使用互斥锁也不能保证原子性操作。Go语言中的atomic包提供了原子操作方法,下面来介绍它的使用方法。
读书笔记 | 赢家的诅咒
《赢家的诅咒》是诺贝尔经济学奖得主理查德·塞勒的经典著作,副标题是“经济生活中的悖论与反常现象”,主要探讨了我们现实生活中广泛存在的一些”反常“现象,所谓”反常“是指与标准经济学理论的分析和预测不一致的现象。
Linux Bash编程:将整数分解为n个随机数
本文介绍使用shell实现将一个整数m随机分解为n个数。
iOS APP自动化:predicate定位
在iOS APP自动化测试中,最基本的操作就是元素定位了。与Android APP自动化测试一样,iOS也支持 ( XCUITest 或 UIAutomation测试框架) 使用属性值定位,比如id、className等元素属性,然而,有时候属性值并不是唯一的,appium、facebook-wda等框架也封装了XPath定位方法,使用XPath和属性值定位方法基本可以定位到99%的元素。但是在性能方面,XPath的定位速度相对较慢,我们可以选择iOS特有的定位策略: predicate 和 class chain定位方法。本文介绍predicate定位方法, class chain定位将在下一篇文章中介绍。
Go语言中的通道
通道(channel)是Go 语言中一种特殊的数据类型,通道本身就是并发安全的,可以通过它在多个 goroutine 之间传递数据。通道是Go 语言编程理念:“Do not communicate by sharing memory; instead, share memory by communicating”(不要通过共享数据来通信,而应该通过通信来共享数据。)的完美实现,在并发编程中经常会遇到它。下面来介绍一下通道的使用方法。
Linux Bash编程:随机数生成、对浮点数进行四舍五入运算
本文介绍使用shell实现随机数生成以及对浮点数进行四舍五入运算
Go语言中的字符串拼接方法介绍
本文介绍Go语言中的string类型、strings包和bytes.Buffer类型,介绍几种字符串拼接方法。