没想到人家巧妙利用了数组连续内存和 int 精度丢失来存储和读取状态,我大意了,没有闪 ┗|`O′|┛ 嗷~~WaitGroupsync.WaitGroup 用于等待一组 goroutine 返回,如:var wg = sync.WaitGroup{} func do() { time.Sleep(time.Second) fmt. ......
383
0
0
2022-11-27
RWMutex读写锁相较于互斥锁有更低的粒度,它允许并发读,因此在读操作明显多于写操作的场景下能减少锁竞争的次数,提高程序效率。type RWMutex struct { w Mutex // held if there are pending writers writerSem uint32 // semaph ......
330
0
0
2022-11-27
同步原语和锁Mutex锁状态type Mutex struct { state int32 sema uint32 } Mutex 结构体只有两个字段:state 表示锁状态sema 是用来控制锁状态的信号量互斥锁的锁状态由 state 这个 32 的结构表示,这 32 位会被分成两部分:+--------------------- ......
323
0
0
2022-11-27
昨天到了原生 map 不是并发安全的,为了安全地使用 map, 1.7 之后推出了 sync.Map 并分析了 Store 和 Load 地源码,今天看看 LoadOrStore 和 Random 地源码,并做个总结。。。┏┛墓┗┓...(((m -__-)msync.Map 源码(2)LoadOrStoreLoadOrStore() 的作用是如果 key ......
320
0
0
2022-11-27
学不完了啊 ┭┮﹏┭┮sync.Map不安全的 mapgo 中原生的 map 不是并发安全的,多个 goroutine 并发地去操作一个 map 会抛出一个 panicpackage main import "fmt" func main() { m := map[string]int { "1": 1, "2": 2, ......
297
0
0
2022-11-27
context ε(┬┬﹏┬┬)3Context在 Go 服务中,往往由一个独立的 goroutine 去处理一次请求,但在这个 goroutine 中,可能会开启别的 goroutine 去执行一些具体的事务,如数据库,RPC 等,同时,这一组 goroutine 可能还需要共同访问一些特殊的值,如用户 token, 请求过期时间等,当一个请求超时后,我们 ......
351
0
0
2022-11-27
Mutexes do no scale. Atomic loads do.atomicatomic 包中提供许多基本数据类型的原子操作,主要可以分为下面几类:原子交换CAS原子加法原子取值原子赋值Value原子交换这一类方法的作用是将 new 存储到地址 addr 并返回该地址上原来的值。func SwapInt32(addr *int32, new int ......
523
0
0
2022-11-27
注意问题go项目运行之后,修改.env文件不会立即生效,需要重启go服务才会生效go项目运行之后,修改config.ini配置文件会立即生效,无需重启go服务重新部署项目开发环境重新build项目(Mac环境的打包语法)CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build 查找指定端口的进程 博主的端口号9001ne ......
447
0
0
2022-11-27
Go天生支持高并发等特性,不仅适合做服务器端开发、分布式存储,同样适合Web网络应用开发。TCP协议和UDP协议的对比?TCP协议的优点:可靠稳定TCP在传输数据之前,会有三次握手来建立连接TCP在传输数据时,有确认、窗口、重传、拥塞控制机制TCP在传输数据完成后,会断开连接用来节省系统资源TCP协议的缺点:慢,传输效率低占用系统资源高容易被攻击(DOS/D ......
344
0
0
2022-11-27
Go语言中的goroutine就是协程1 进程概念进程,直观点说,保存在硬盘上的程序运行之后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。特点操作系统会以进程为单位,分配系统资源(CPU时间片,内存等资源),进程是资源分配的最小单位。示意图2 线程概念线程,有时被称为轻量级进程(LightWeigh ......
377
0
0
2022-11-27
RPC什么是RPCRPC的中文是“远程过程调用”,对应的英文全称是:Remote Procedure Call,可以简单理解为一个节点请求另一个节点提供的服务理解“本地过程调用”可以更好的理解“远程过程调用”知识点:RPC主要依赖于客户端与服务端建立socket链接;而HTTP REST实现通讯的代价比较高,这是RPC的一个优势体现。RPC详解看这里为什么用 ......
444
0
0
2022-11-27
什么场景下用channel合适呢?通过全局变量加锁同步来实现通讯,并不利于多个协程对全局变量的读写操作。加锁虽然可以解决goroutine对全局变量的抢占资源问题,但是影响性能,违背了原则。总结:为了解决上述的问题,我们可以引入channel,使用channel进行协程goroutine间的通信。Go语言中的操作系统线程和goroutine的关系:一个操作系 ......
374
0
0
2022-11-27
不要通过共享来通信,而要通过通信来共享。Go 并发goroutinego 程(goroutine)是 go 并发的核心,它比线程要更小, 由 go Runtime 管理,运行 goroutine 只需要很少的栈空间,因此可以实现很大的并发量,在 go 中,开启一个 goroutine 只需要使用 go 关键字即可:package main import ......
524
0
0
2022-11-27
需求整理管理后台有超管权限,超管拥有所有权限普通管理员可以设置角色,角色单选角色可以赋予多个权限,权限多选这样我们就实现了对普通管理员的角色和权限的灵活管理文档说明基于golang语言开发基于gin网络框架开发基于MySQL5.8开发把权限管理部分封装成中间件,在rourter文件中引用非核心代码已省略,用3个竖着排列的点号.表示数据库表结构设计管理员表权限 ......
400
0
0
2022-11-25
这是一篇写于2021年3月的总结稿,当时还立了Flag: 我打算从PHP转Go啦,坚持每天打卡,坚持每天学习新的知识点,为月薪30k+做准备。接下来看看我当年学的Go基础知识点吧:编译、变量、常量、基本数据类型、字符串。谁不是从易到难,一步一步学的呢?编译使用 go build在项目目录下执行在其他路径下编译 go build ,需要在后面加上项目的路径(项 ......
415
0
0
2022-11-25