Go 语言机制Go 语言互斥Go语言的sync包中实现了两种 Mutex (互斥)和 RWMutex (读写),其中 RWMutex 是基于 Mutex 实现的,只读的实现使用类似引用计数器的功能。互斥Mutex 是互斥,有 Lock()加锁、Unlock()解锁两个方法,使用Lock()加锁后,便不能再次对其进行加锁,直到利用 Unlock()解锁对其解锁后才能再次加锁。适用于读
转载 2023-07-11 22:56:36
188阅读
这是Go语言单元测试系列教程的第4篇,介绍了如何在单元测试中使用gomock和gostub工具mock接口和打桩。在上一篇《Go单元测试 — 数据库 CRUD 的 Mock 测试》中,我们介绍了如何使用go-sqlmock和miniredis工具进行数据库测试。除了网络和数据库等外部依赖之外,我们在开发中也会经常用到各种各样的接口类型。本文就举例来演示如何在编写单元测试的时候对接口类型进行mock
转载 2024-03-01 20:08:26
40阅读
# Golang使用MySQL表操作 在软件开发中,数据库是一个非常重要的组成部分,而MySQL作为一个流行的关系型数据库,经常被用于存储数据。在某些情况下,我们需要对数据库中的表进行锁定以保证数据的一致性和完整性。本文将介绍如何在Golang使用MySQL进行表操作,并提供代码示例。 ## 什么是表是一种数据库,用于限制对数据库表的访问。在进行一些特定操作时,可能需要对表
原创 2024-06-26 03:40:28
141阅读
MySQL了解吗 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,机制就是这样的一个机制。就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。隔离级别与的关系 在Read Uncommitted级别下,读取数据不需要加共享,这样就不会跟
golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动。这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/MySQL这个驱动,更新维护都比较好。下面演示下具体的使用,完整代码示例可以参考最后。下载驱动sudo go get github.com/go-sql-driver/mysql数据库连接db, er
转载 2023-07-14 16:41:27
185阅读
的引入如果A有100元,同时对B、C转账,若处理是同时的,则此时同时读取A的余额为100元,在对两人转账后写回,A的余额不是0元而是50元。因此,为了防止这种现象的出现,要引入的概念,如只有在A对B的转账完成后,才可对C转账。机制用于管理对共享资源的并发访问。的基本类型悲观和乐观悲观(X Lock),正如其名,具有强烈的独占和排他特性。它指的是对数据被外界(包括本系统当前的其他事务,
转载 2023-12-01 11:12:21
83阅读
golang 文件/目录的实现
# Golang 使用 Redis 分布式的实现 在微服务和分布式系统中,确保多个服务在共享资源时不会发生冲突是一项重要任务。Redis 提供了一种简单有效的方法来实现分布式。本文将引导你通过一系列步骤,在 Golang使用 Redis 来实现分布式。 ## 流程概述 实现 Redis 分布式的基本流程如下: | 步骤 | 操作描述
原创 8月前
62阅读
并发场景,机制尤为关键,我们一起通俗易懂的了解下golang吧 ...
转载 2021-08-19 14:34:00
349阅读
2评论
一、什么场景下需要用到当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,有可能是多个线程同时访问公共资源,所以这个时候就需要用到了,那么关于使用场景主要涉及到哪些呢? 1. 多个线程在读相同的数据时2. 多个线程在写相同的数据时3. 同一个资源,有读又有写时 二、G ...
转载 2021-10-31 15:37:00
186阅读
2评论
go
原创 精选 2022-07-28 23:36:53
7857阅读
1点赞
func TryLockFile(filePath string) (bool, *os.File) { file, err := os.OpenFile(filePath, os.O_CREATE|os.O_RDWR, 0644) if err != nil { return false, nil
原创 3月前
38阅读
Golang互斥
原创 2024-05-25 22:04:12
14阅读
## Golang Redis - 保护共享资源的常用方法 在并发编程中,保护共享资源是一个非常重要的问题。当多个goroutine同时访问临界区时,可能会导致数据竞争和不确定的结果。为了解决这个问题,我们可以使用来保护共享资源。在本文中,我们将介绍如何使用Golang和Redis实现一个简单的分布式。 ### 什么是分布式? 分布式是一种用于在分布式系统中协调并发访问的机制。它确
原创 2023-08-23 08:57:48
104阅读
一、mysql类型(1) 共享/排它(Shared and Exclusive Locks)共享和排他是InnoDB引擎实现的标准行级别。拿共享是为了让当前事务去读一行数据。拿排他是为了让当前事务去修改或删除某一行数据。。设置共享:select * from user where id = 1LOCK IN SHARE MODE;设置排他:select * from user
    机制是数据库有别于文件系统的一个重要的特点,也是用来管理并发访问的一个有效的方式。MySQL分为表级、页级与行级。表级MySQL中粒度最大的一种,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定。    表级锁定分为两类,读与写。读是预期将对数据表进行
转载 2023-08-31 10:43:24
74阅读
# 使用Golang和GORM操作MySQL:从基础到实践 在当今的软件开发中,Golang因其高效的执行性能和简洁的语法而受到广泛欢迎。MySQL是一种流行的开源关系型数据库,通常被用作后端系统的数据存储。本文将带领您了解如何使用Golang和GORM(一个流行的Golang ORM库)来操作MySQL数据库。 ## 1. 准备工作 让我们开始之前,确保您已经安装了以下工具: - Go(
原创 10月前
138阅读
​ 协程依次执行:从寄存器读取 a 的值 -> 然后做加法运算 -> 最后写到寄存器。试想,此时一个协程取出 a 的值 3,正在做加法运算(还未写回寄存器)。同时另一个协程此时去取,取出了同样的 a 的值 3。最终导致的结果是,两个协程产出的结果相同,a 相当于只增加了 1。所以,的概念就是,我正在处理 a(锁定),你们谁都别和我抢,等我处理完了(解锁),你们再处理。这样就实现了,同
转载 2020-11-23 13:08:00
183阅读
2评论
在微服务的docker容器中,多个pod抢占一套资源时,需要用到全局,一般使用redis可以很好的实现保护功能。安装redis-server:apt install redis-serve
原创 2022-12-21 10:42:53
613阅读
目录一、MySQL1.1 概述幻读问题的分类MySQL不同隔离级别的底层实现的释放时机1.2 全局使用方式使用场景改进方式1.3 表级使用方式缺点元数据(MDL)使用方式意向AUTO-INC 1.4 行级记录(Record Lock)间隙(Gap Lock)临键(Next-Key Lock)常见规则行粒度粗化插入意向1.5 乐观与悲观乐观悲观1.6 共享排他
转载 2023-09-27 17:22:29
33阅读
  • 1
  • 2
  • 3
  • 4
  • 5