摘要: 前言 go的 init函数给人的感觉怪怪的,我想不明白聪明的 google团队为何要设计出这么一个“鸡肋“的机制。实际编码中,我主张尽量不要使用init函数。 首先来看看 init函数的作用吧。 init() 介绍 init()与包的初始化顺序息息相关,所以先介绍一个go中包的初始化顺序吧。(下面的 阅读全文
posted @ 2021-04-10 20:42 机智的小小帅 阅读(2687) 评论(1) 推荐(1) 编辑
摘要: 前段时间一个需求涉及到给图片加水印,考虑图片安全性,决定放在后端加水印。记录一下代码。 思路 思路是先为水印文字生成一个仅包含水印文字的图片,把这个图片倾斜一定角度 (一般水印都是倾斜的),之后把倾斜的水印文字图片贴在原图上,得到最终的水印图片。 代码 // watermark.go package 阅读全文
posted @ 2023-01-15 20:32 机智的小小帅 阅读(963) 评论(0) 推荐(0) 编辑
摘要: mock 库的地址: https://github.com/golang/mock mock 库算是 go 项目中编写单元测试时的必备库了,它分为两个模块 mockgen: 可以根据接口来生成单元测试代码 gomock: 利用 mockgen 生成测试代码来实现打桩 (stub) 功能 其实之前对这 阅读全文
posted @ 2022-05-16 01:40 机智的小小帅 阅读(1580) 评论(0) 推荐(0) 编辑
摘要: mutex 的实现思想 mutex 主要有两个 method: Lock() 和 Unlock() Lock() 可以通过一个 CAS 操作来实现 func (m *Mutex) Lock() { for !atomic.CompareAndSwapUint32(&m.locked, 0, 1) { 阅读全文
posted @ 2022-04-06 00:27 机智的小小帅 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 这几天在研究 Go 的源码,突然发现了一个之前没有见过的位运算,见这里 new &^= mutexWoken & 和 ^,分别表示 AND 和 XOR,这个不用多说。 值得一提的是 ^ 这个符号,在我的印象中,它一直是一个二元运算符,平时见的最多的是 a ^ b 这种用法。 但是实际上它还是一个一元 阅读全文
posted @ 2022-04-02 12:04 机智的小小帅 阅读(1084) 评论(0) 推荐(1) 编辑
摘要: Overview Definition From wikipedia The actor model in computer science is a mathematical model of concurrent computation that treats actor as the univ 阅读全文
posted @ 2022-03-13 18:24 机智的小小帅 阅读(1533) 评论(0) 推荐(0) 编辑
摘要: Overview go 里面的 rwlock 是 write preferred 的,可以避免写锁饥饿。 读锁和写锁按照先来后到的规则持有锁,一旦有协程持有了写锁,后面的协程只能在写锁被释放后才能得到读锁。 同样,一旦有 >= 1 个协程写到了读锁,只有等这些读锁全部释放后,后面的协程才能拿到写锁。 阅读全文
posted @ 2022-03-12 18:49 机智的小小帅 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 几段 Go 并发代码 可以使用 go run --race main.go 来验证代码中是否存在并发问题 for range for i,v := range slice { // ... // go func() ... } 在 for range 中,i, v 这两个变量仅仅被初始化一次,在之后 阅读全文
posted @ 2022-01-09 00:09 机智的小小帅 阅读(155) 评论(0) 推荐(0) 编辑
摘要: [翻译] The Go Memory Model Introduction (简介) Go 内存模型指定了在什么情况下,一个协程对变量的写操作可以被另一个协程读到。 Advice (建议) 当一份数据同时被多个协程访问,在对这份数据进行修改时,需要保证对这份数据的访问时按照一定顺序进行的。 为了让访 阅读全文
posted @ 2022-01-08 16:57 机智的小小帅 阅读(486) 评论(0) 推荐(0) 编辑
摘要: Backpressure 我会直译为背压 背压是每个软件工程师在某个时候都需要处理的问题。在这篇文章中,我将会阐述什么是背压,为什么背压是常见的,以及怎样缓解它。 The Definition 在编程的世界中,背压一词借鉴自流体力学。 wiki 中是这样定义背压的 Resistance or for 阅读全文
posted @ 2021-12-04 18:00 机智的小小帅 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 精度损失而引发的 bug 本周碰到因为 精度损失,导致 分段计算的结果之和 ≠ 整体计算的结果 基本背景 有一个佣金功能,需要计算销售人员每个月的佣金以及销售人员所有月份的总佣金。 佣金金额 = 销售额 * 佣金比例 其中 销售额 和 佣金 的精度都是当前货币的最小单位。目前货币单位为美元,最小单元 阅读全文
posted @ 2021-11-06 14:37 机智的小小帅 阅读(80) 评论(0) 推荐(0) 编辑