Go

两个协程交替打印0-100

2022-07-27

使用无缓冲的 channel,使两个协程同步,按照相同的步调执行,但因为要交替打印,所以不能每次同步后都打印,要让该输出的协程输出,不该输出的协程不输出。

点击阅读

Golang常见控制结构Mutex

2022-07-10

前言

互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此 Go 语言提供了非常简单易用的 Mutex,Mutex 是一个结构体类型,对外暴露 Lock()Unlock() 两个方法分别用于加锁和解锁。

点击阅读

defer 的使用及其原理

2022-07-08
前言 defer 语句用于延迟函数的调用,每次 defer 都会把一个函数压入栈中,函数返回前再把延迟的函数取出并执行。 通常地,我们把创建 defer 的函数称为主函数,defer 语句后面的函数称为延迟函数。 延迟函数可能有输入参数,这...
点击阅读

Golang的map数据结构

2022-07-08

map 数据结构

Golang 的 map 使用哈希表作为底层实现,一个哈希表里可以有多个哈希表节点,也即 bucket,而每个 bucket 就保存了 map 中的一个或一组键值对。

点击阅读

Golang的chan数据结构

2022-07-07

前言

channel 是 Golang 在语言层面提供的 goroutine(协程)间的通信方式,比 Unix 管道更易用也更轻便。channel 主要用于进程内各 goroutine 间通信,如果需要跨进程通信,建议使用分布式系统的方法来解决。

点击阅读

Go中如何自定义排序

2022-06-28

前言

排序应该是我们日常工作中经常使用到的算法,一般通过系统自带的 sort 库即可实现简单排序,但如果有一些定制化的需求,那么应该怎么排序呢?本文将简单阐述Go中如何自定义排序规则。

需求

从具体需求中看Go中如何自定义排序规则。
假设我们有一堆信封[w, h],w表示信封宽度,h表示信封高度。
现在我们需要对一堆信封排序,排序规则是按宽度从小到大,如果宽度相同,则按高度从大到小排。

点击阅读

tRPC-Go 分布式互斥定时器

2022-05-15

一、前言

在业务开发中,我们经常使用定时任务去处理一些任务,比如定时更新数据等。本文将在 tRPC-Go 的定时任务教程基础上,补充说明如果有多个定时任务,如何共用一个定时策略。

点击阅读