自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 Golang 实现可重入锁(ReentrantLock)

对 Go SDK 包熟悉的人都知道,其内部只提供了简单的、不可重入的 和 结构。但是在一些实际应用中可能会出现线程需要多次进入临界区操作共享资源的情况,这种情况下使用 或 都会导致死锁。Java 中 修饰的代码块、JUC 包提供的 都是可重入锁。下面我们来使用 Golang 以最简单的方式去实现一个可重入锁。(注:以下代码可以从 gitee 中克隆,https://gitee.com/elzatahmed/go-reentrant-lock)GoLang 并没有像 Java 那样直接获取当前线

2023-03-07 20:27:23 1221 2

原创 Golang 设计实现排序算法工具包 go-sort

本次内容标题虽然包含了排序算法,但是我会更注重于工具包的设计与实现。排序算法我只实现了冒泡排序、选择排序、快速排序和堆排序。工具包的设计我们需要注重于开放API的设计上,API的灵活性能直接说明工具包设计的好坏。首先排序我们是在slice数据结构上执行的,我们应当能支持所有数据类型的slice,这就要求我们能做到不查看slice内部数据的情况下正确排序。为了做到这一点我首先定义了Sortable。...

2022-08-10 10:59:19 347

原创 Golang ORM框架 — GORM

定义模型之前先为大家介绍gorm中预置的模型结构体gorm.Model"index"`}该结构体中包含了各种数据库模型共同具有的一些参数,包括主键、创建时间、更新时间和删除时间。我们以go语言的内嵌结构体的形式将其插入到我们的结构体当中。这样gorm就会感知到这些参数的存在,并在一般的数据库操作中为我们自动更新这些参数(PS在进行Query时,gorm会去判断DeletedAt是否为nil,只返回那些DeletedAt不为nil的记录)。...

2022-08-01 16:25:24 2215

原创 Golang — 解析 yaml 文件

文件是研发人员最常用的配置文件, 文件的树形结构一直很受大家的欢迎。有过 开发经验的同学对 非常熟悉, 整个项目的运行就需要一个 文件的支持,那么 Golang 项目中的 文件是如何解析的呢?Let`s dive in!PS:根据 的说法,Golang 有三个强大的工具包支持 文件的解析,分别是: 。本文中我们将讨论其中 的用法。对 yaml 解析源码感兴趣的同学请进入:go-yaml源码链接第一步,我们创建好项目后导入 go-yaml 依赖:第二步,创建 main 文件并在内部编写一个简

2022-07-13 18:06:06 4455

原创 Golang bufio Reader 源码详解

是对 gosdk 种 和 的二次打包,以 作为其 buffer,在 和 的基础上提供了更多方便有效的 io 读取和写入方法。PS:由于代码过多,对源码函数流程的解释直接编写在源码注释上 和 是 gosdk 包中的非常重要的两个接口,它们内部各包含一个方法 和 ,传入参数 ,返回读取/写入的字节数和错误。核心作用为连续读取字节填充传入的 slice,并在读取停止时返回字节数和遇到的错误(无错误时返回nil)。该结构体是 种所有读取相关方法的 receiver,即所有读取操作都需要在创建

2022-07-12 17:50:54 1057 1

原创 Golang - sync包的使用 (WaitGroup, Once, Mutex, RWMutex, Cond, Pool, Map)

接触过 Golang 并发编程的同学都知道,Golang 并发编程中的核心思想与其他语言,例如C、C++、Java等,不太一样。Golang 鼓励使用 channel 以 的方式进行线程间交互。但是为了满足更多需求,gosdk 还是添加了 包用来支持传统的以共享内存的方式进行线程交互。 包可以比作于 Java 中的 包,里面包含了包括锁、池、线程屏障、原子类型等多种我们在并发编程中常用到的组件之外,还对一些原始的、不支持并发安全的数据结构添加了并发安全的支持。接下来,我们就讨论一下这些组件的使用方法.

2022-07-06 16:00:40 724 2

原创 Golang中的错误处理

go的错误处理与其他一些主流编程语言具有本质的区别,go的内嵌类型error不含有stack trace,也不支持传统的 try/catch 语句模型。go中的错误只是函数返回的一个正常的变量值,对待错误也能像对待普通变量一样,go的这种错误模型带来了更轻易、更简便的程序设计风格。中包含下述的一个接口类型:go中的 接口只有一个方法 返回一个字符串,该字符串就可以包含该错误的内部信息,没有任何其他方法,错误就是这么简单!构造 error 一般有两种方法:、,区别是:的参数只能传入字符串常量可以利用fo

2022-07-04 21:28:39 1374

原创 golang 实现 tcp-聊天室

想必做golang网络开发的同学对gosdk中net/http包十分熟悉,使用net/http可以快速实现http服务器的搭建。但是大家对tcp协议的直接使用可能就没有那么熟悉了。在接下来的文档里我将讲解如何使用gosdk中的net包实现一个以tcp协议为基础的简易的终端群聊聊天室应用。在dive in之前,需要回顾/介绍以下golang并发编程中的核心概念:在go.dev中是这么介绍goroutine的 ,goroutine是一种被go runtime管理的轻量级线程,其并不会直接对应到重量级的系统线程

2022-07-03 22:59:59 1576 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除