在企业内部创建一个公共的Golang模块工程可以帮助提高代码复用性和开发效率。本文将从如何创建一个公共的Golang工程开始,指导你一步步创建它、并引入到你的工程中。1、公共模块规范下面是一个简单的步骤指南来创建这样一个公共模块项目。创建版本控制仓库:使用版本控制工具(如Git)创建一个新的代码仓库,用于管理该公共模块工程的代码。项目结构:定义好项目的结构, ......
193
0
0
2024-01-14
OpenFaaS是一款广受欢迎的无服务(Serverless/Faas)部署框架,为开发者提供了一种简单而高效的方式来构建和部署无服务器函数。它旨在降低构建和管理无服务器应用程序的复杂性,同时提供可扩展性和高可用性。Serverless/faas由于其开发速度快,完全屏蔽底层基础设施细节,低成本、自动扩缩容等优势,广受欢迎。但是如何在企业内独立实现一个ser ......
226
0
0
2024-01-13
最近一年各大中小厂都在搞"优化",说到优化,目的还是"降本增效",降低成本,增加效益(效率)。技术层面,也有一些降本增效的常规操作。比如池化、io缓冲区技术golangC#eg.池化技术snnc.PoolObjectPool前端切图仔,归入前端资源池 , 随用随取字节数组缓冲区bytes.BufferList---io缓冲区bufioBufferStream ......
205
0
0
2024-01-12
本地启动在第三篇自定义中间件的前提下,已经说了很多关于本地通过 CRD 或者 File 作为 provider 的启动方式,这里想要补充一下关于本地 DEBUG 3.0.0 版本代码的问题,后续的源码分析也都会基于目前最新的 3.0 版本。在写文章的时候,目前 3.0 版本还是 beta 版本。按照上述文章的方式安装之后其实会发现本地启动会报一个关于*v1a ......
195
0
0
2024-01-06
原文链接: go-zero 的自适应熔断器上篇文章我们介绍了微服务的限流,详细分析了计数器限流和令牌桶限流算法,这篇文章来说说熔断。熔断和限流还不太一样,限流是控制请求速率,只要还能承受,那么都会处理,但熔断不是。在一条调用链上,如果发现某个服务异常,比如响应超时。那么调用者为了避免过多请求导致资源消耗过大,最终引发系统雪崩,会直接返回错误,而不是疯狂调用这 ......
332
0
0
2024-01-06
目录固定窗口滑动窗口漏桶算法令牌桶滑动日志总结限流是项目中经常需要使用到的一种工具,一般用于限制用户的请求的频率,也可以避免瞬间流量过大导致系统崩溃,或者稳定消息处理速率这个文章主要是使用Go实现常见的限流算法,代码参考了文章面试官:来,年轻人!请手撸5种常见限流算法! 和面试必备:4种经典限流算法讲解如果需要Java实现或更详细的算法介绍可以看这两篇文章固 ......
299
0
0
2023-09-13
目录互斥锁的定义go Mutex 的基本用法互斥锁使用的两个例子gin Context 中的 Set 方法sync.Pool 中的 pinSlow 方法互斥锁使用的注意事项互斥锁锁定的是什么互斥锁实现原理信号量等待队列原子操作Mutex 的公平性Mutex 源码剖析LockUnlock总结在我们的日常开发中,总会有时候需要对一些变量做并发读写,比如 web ......
341
0
0
2023-09-11
目录1. 简介(Introduction)2. 建议(Advice)3. 发生在…之前(Happens Before)3.1 重排序3.2 happens-before3.3 规则4. 同步(Synchronization)4.1 初始化(Initialization)4.2 Go协程的创建(Goroutine creation)4.3 Go协程的销毁(Go ......
310
0
0
2023-09-11
目录扫描的目的扫描的实现运行期内存分配运行扫描阶段总结之前阐述了 golang 垃圾回收通过保证三色不变式来保证回收的正确性,通过写屏障来实现业务赋值器和 gc 回收器正确的并发的逻辑。其中高概率的提到了“扫描队列”和“扫描对象”。队列这个逻辑非常容易理解,那么”扫描对象“ 这个你理解了吗?有直观的感受吗?这篇文章就是要把这个扫描的过程深入剖析下。扫描的东西 ......
336
0
0
2023-09-11
目录1.md5 加密——不可逆2.hmacsha 加密——不可逆hmac-md5加密hamacsha1 加密hamacsha 256 加密hmacsha512加密hamasha 调用3.Sha 加密——不可逆sha1sha256sha512sha调用4.base 加密 解密加密解密base64 调用5.AES 加密CBC方式ECB方式CFB 方式6.RSA加 ......
352
0
0
2023-09-10
目录0. 简介1. 创建main goroutine2. 调度main goroutine0. 简介上一篇博客我们分析了调度器的初始化,这篇博客我们正式进入main函数及为其创建的goroutine的过程分析。1. 创建main goroutine接上文,在runtime/asm_amd64.s文件的runtime·rt0_go中,在执行完runtime.s ......
315
0
0
2023-09-05
Golang 协程/线程/进程 区别详解转载请注明来源:janrs.com/mffp概念进程 每个进程都有自己的独立内存空间,拥有自己独立的地址空间、独立的堆和栈,既不共享堆,亦不共享栈。一个程序至少有一个进程,一个进程至少有一个线程。进程切换只发生在内核态。线程 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,是由操作系统调度,是操作系统调度(CPU调度 ......
312
0
0
2023-08-28
之前有兄弟留言想学习一下 Context,他来了,虽迟但到。前言在 Go 语言中,Context 是一个非常重要的概念,它用于在不同的 goroutine 之间传递请求域的相关数据,并且可以用来控制 goroutine 的生命周期和取消操作。本文将深入探讨 Go 语言中 Context 特性 和 Context 的高级使用方法。基本用法在 Go 语言中,Co ......
378
0
0
2023-08-27
Goroutine & SchedulerGoroutine ,Go 语言基于并发(并行)编程给出的自家的解决方案。goroutine 是什么?通常 goroutine 会被当做 coroutine(协程)的 golang 实现,从比较粗浅的层面来看,这种认知也算是合理,但实际上,goroutine 并非传统意义上的协程,现在主流的线程模型分三种:内 ......
295
0
0
2023-08-23
一般程序的内存分配 在讲Golang的内存分配之前,让我们先来看看一般程序的内存分布情况: 以上是程序内存的逻辑分类情况。我们再来看看一般程序的内存的真实(真实逻辑)图: Go的内存分配核心思想 Go是内置运行时的编程语言(runtime),像这种内置运行时的编程语言通常会抛弃传统的内存分配方式,改为自己管理。这样可以完成类似预分配、内存池等操作,以避开系统 ......
284
0
0
2023-08-23