遇见Golang,拥抱未来
文章平均质量分 82
我们一起学go吧!一起交流学习!
小生凡一
Talk is cheap. Show me the code.
展开
-
图解 ETCD|基本概念|组件架构|内部通信
介绍ETCD基本概念,组件架构,内部通信原创 2024-08-10 13:06:34 · 670 阅读 · 0 评论 -
图解 RocketMQ 架构
图解 RocketMQ 架构原创 2024-07-07 23:43:22 · 1765 阅读 · 4 评论 -
图解 Kafka 架构
Kafka 是一个可横向扩展,高可靠的实时消息中间件,常用于服务解耦、流量削峰。原创 2024-07-02 23:49:23 · 1993 阅读 · 2 评论 -
Go 的循环引用到底能不能被GC回收?不是互相可达吗?
Go中的循环引用到底会不会导致GC无法回收?原创 2024-06-25 23:56:29 · 941 阅读 · 0 评论 -
图解 Twitter 架构图
两年前,马老板收购了twitter,并且做了一系列的大动作。那么今天我们来看一下这个全球最火的软件之一的架构。原创 2024-06-16 22:44:00 · 1549 阅读 · 5 评论 -
Go singlefight 源码详解|图解
singleflight 将相同的并发请求合并成一个请求,进而减少对下层服务的压力,通常用于解决缓存击穿的问题。原创 2024-06-10 18:45:50 · 1103 阅读 · 0 评论 -
http 一定是基于TCP连接的吗?
HTTP是不是基于TCP的?原创 2024-05-05 16:39:01 · 1317 阅读 · 0 评论 -
redis 高可用 Sentinel 详解
Sentinel 本质上只是一个运行在特殊模式下的Redis服务器,Sentinel如何保证redis的高可用呢?原创 2024-05-01 20:33:39 · 1706 阅读 · 1 评论 -
基于 Redis 发布订阅实现服务注册与发现
Redis发布订阅的详解并基于发布订阅进行服务注册与发现原创 2024-04-27 20:23:54 · 1042 阅读 · 1 评论 -
【设计模式】单例模式|最常用的设计模式
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。原创 2024-04-21 09:50:29 · 501 阅读 · 0 评论 -
线程池详解并使用Go语言实现 Pool
在线程池中存在几个概念:核心线程数最大线程数任务队列。与其他池化技术不同的是,线程池是基于生产者-消费者模式来实现的。原创 2024-04-06 23:42:45 · 1269 阅读 · 0 评论 -
图解缓存淘汰算法 LRU、LFU | 最近最少使用、最不经常使用算法 | go语言实现
无论是什么系统,在研发的过程中不可避免的会使用到缓存,而缓存一般来说我们不会永久存储,但是缓存的内容是有限的,那么我们就可以使用 LRU算法,来维持缓存中的信息的时效性。原创 2024-03-16 13:16:23 · 5977 阅读 · 0 评论 -
分布式ID生成算法|雪花算法 Snowflake | Go实现
在分布式领域中,有许多分布式ID生成算法,今天我们就来介绍一下雪花算法。原创 2024-03-03 16:43:02 · 1733 阅读 · 2 评论 -
MySQL锁相关总结|悲观锁、乐观锁、读锁、写锁、表锁、行锁、页面锁、间隙锁、临键锁
MySQL 的锁上可以分成三类:总体、类型、粒度。下面我们就来详细讲一下这些锁。原创 2024-02-21 00:10:33 · 296 阅读 · 0 评论 -
【分布式事务 XA模式】MySQL XA模式详解
MySQL 的 5.0.3 版本开始支持XA分布式事务,并且只有innoDB存储引擎支持XA事务。原创 2024-02-24 21:54:13 · 1781 阅读 · 0 评论 -
分布式事务 | 2PC与3PC 详解
分布式事务| 2PC 和 3PC原创 2023-12-18 00:04:34 · 1008 阅读 · 0 评论 -
Go语言实现LRU 淘汰算法
定义结构体maxBytes int64 //允许使用的最大内存 Nbytes int64 //当前已使用的内存 ll * list . List //双向列表 cache map [ string ] * list . Element //键是字符串,值是双向链表中对应节点的指针 OnEvicted func(key string , value Value) //是某条记录被`移除`时的回调函数,可以为 nil。使用Len来计算需要多少个字节允许值是实现了 Value 接口的任意类型。原创 2023-03-18 17:04:22 · 715 阅读 · 0 评论 -
【Go语言入门指南】零基础入门 go 语言 | Golang 入门指南
这篇文章是我自己亲身经历这样去学go的,本人是从20年的10月份开始入坑go语言的,当时的资料真的少,现在关于go语言的资料已经很多了。我就在把我自己的学习路线稍微梳理一遍,我个人觉得,学完之后,像深信服,b站,得物什么的应该是没什么问题,但如果是字节,腾讯,阿里这种就除了一些硬性条件之外,自己再刷多点题,背多点八股了。原创 2022-09-25 22:36:10 · 10727 阅读 · 8 评论 -
【SQL注入】关于GORM的SQL注入问题
所以说我们要避免使用字符串直接拼接的形式来进行SQL的查询。原创 2022-09-03 20:58:09 · 3271 阅读 · 0 评论 -
ETCD 的组件架构和内部通信
文章目录ETCD 常用术语ETCD 常用术语术语描述备注Raftetcd实现一致性的核心etcd有etcd-raft模块FollowerRaft中的从属节点竞争leader失败LeaderRaft中的领导协调节点原创 2022-03-20 11:38:00 · 2848 阅读 · 0 评论 -
【Go面试题】关于 array 和 slice 一个问题
文章目录写在前面题解那么Go的值传递和引用类型又有哪些?看看这个例子回到这道题上参考链接写在前面最近有同学问我这个问题啊,以下两个函数输出了什么?func arrayTest() { a := [3]int{1, 2, 3} for k, v := range a { if k == 0 { a[0], a[1] = 100, 200 } a[k] = 100 + v } fmt.Println(a)}func sliceTest() { a := []int{1原创 2022-03-12 10:42:19 · 1242 阅读 · 1 评论 -
关于Go的Channel,Silce,Map
1. Chan1.1 channel 数据结构type hchan struct { qcount uint // 队列中的全部元素个数 dataqsiz uint // 底层循环数组的长度 buf unsafe.Pointer // 缓冲链表 buf 指向底层循环数组,只有缓冲型的 channel 才有。环型的缓存 elemsize uint16 // chan中的元素大小 closed uint32 // chan是否被关闭的标原创 2022-03-01 10:36:23 · 1539 阅读 · 2 评论 -
goroutine和channel 如何控制并发顺序?
文章目录写在前面分析1. goroutine2. select3. sync.WaitGroup4. channel5. 代码解释完整写在前面最近有同学问我这个问题。题目意思是 利用goroutine和channel 连续输出10次,dog,cat,fish,并且都要按照这个dog,cat,fish的顺序输出。分析题目既然要求是使用goroutine,那么我们肯定是要控制好这个并发的顺序。因为并发是具有随机性的,这个题目并不难,很典型的chan控制进程之间的顺序。那我们先了解一下 goro原创 2022-02-20 20:22:07 · 2982 阅读 · 3 评论 -
【RabbitMQ】Go语言实现六种消息中间件模型
文章目录写在前面1. 介绍1.1 什么是MQ1.2 什么是RabbitMQ1.3 AMQP 协议2. Go语言操作RabbitMQ2.1 下载2.2 引入驱动2.3 HelloWorld 模型2.3.1 生产者2.3.2 消费者2.3.3 结果2.4 Work Queues 模型2.4.1 生产者2.4.2 消费者2.4.3 结果2.5 Publish/Subscribe 模型2.5.1 生产者2.5.2 消费者2.5.3 结果2.6 Routing 模型2.6.1 生产者2.6.2 消费者2.6.3 结果原创 2022-01-10 20:55:35 · 5287 阅读 · 2 评论 -
关于GORM v2 的一些改变
文章目录1. mysql 配置1.2 驱动1.3 连接2. 读写分离3. 读写验证目前暂时把gorm v2我用到的与v1不同的一些点放在这里,后续遇到会再更新。大家不要误以为 V2 版本的Git Tag是 2.x ,其实是 v1.20.0。1. mysql 配置1.2 驱动gorm:go get gorm.io/gormmysql:gorm.io/driver/mysql1.3 连接定义一个全局的gorm模型var DB *gorm.DB定义全局日志输出 var or原创 2022-01-07 15:30:34 · 3254 阅读 · 0 评论 -
“id“: “go.micro.service.api“,“code“: 500, “detail“: “service not found“,“status“: “Internal Server E
Go-micro报错问题 “id”: “go.micro.service.api”,“code”: 500, “detail”: “service not found”,“status”: “Internal Server Error”{ "id": "go.micro.service.api", "code": 500, "detail": "service not found", "status": "Internal Server Error"}解决我按照原创 2022-01-02 17:27:22 · 1932 阅读 · 4 评论 -
我的Go+语言初体验——用Go+写个爬虫并进行数据处理
“我的Go+语言初体验” | 征文活动进行中…文章目录写在前面1. 找到blink2. 分析页面3. 编写代码3.1 发送请求3.2 解析数据3.3 数据处理3.4 输出所有的评论总结写在前面是这样的!我个人是Go语言爱好者,接触七牛是在大一的时候,这几天七牛云带着Go+来CSDN征文!那我就用Go+写一个爬虫吧!1. 找到blinkCSDN呢,要切换成新版才能看到blink的!我本来是旧版的,就先切换一下新版。我们就找到了2. 分析页面我们发现并没有相应的接口显示评论,所以我们点击更原创 2021-11-30 09:59:55 · 4246 阅读 · 4 评论 -
我的Go+语言初体验—— 一个Golang开发者的Go+初体验
“我的Go+语言初体验” | 征文活动进行中…文章目录写在前面1. 安装写在前面大家好啊!我是FanOne,一名Go语言爱好者,在CSDN也写了一些关于Go语言的专栏文章。最近七牛云带着他们家的Go+来CSDN社区征稿推广啦~ 我也很喜欢七牛云啊,经常用他们家的对象存储!话不多说,让我们一起来揭开Go+神秘的面纱吧!1. 安装按照官网的指示,对Go+进行安装,适合mac或是linux。windows下的好像只有vscode有go-plus插件,goland似乎还不支持,所以我们使用vsco原创 2021-11-28 12:22:32 · 8042 阅读 · 4 评论 -
Go语言 解决 Scan 空格结束输入的问题
完美解决Go语言中,Scan空格结束输入的问题。原创 2021-10-10 17:53:52 · 2908 阅读 · 2 评论 -
【FanOne的博客导航】希望你能喜欢这里 | 欢迎光临~
这里是凡一的博客导航 | 关于Go、区块链、大数据的一些笔记和实战,希望能帮助到你~ 欢迎光临~原创 2021-08-14 11:27:44 · 10562 阅读 · 18 评论 -
从 HelloWorld 到 企业级web框架 | 手把手教你安装 beego
手把手教你从 Hello World 到搭建一个企业级框架 !Beego!Let's go!原创 2021-07-30 08:27:45 · 2096 阅读 · 49 评论 -
我被Go反射折磨48小时后,反被我拿捏!!| 【实习日记】Go反射
反射1. 反射简介1.1 反射是什么?1.2 为什么需要反射?2. reflect包2.1 基本反射2.2 反射与指针2.3 反射与对象2.4 反射与函数2.5 反射与方法2.6 反射例子1. 反射简介1.1 反射是什么?Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和变量支持的内在操作,但是在编译时并不知道这些变量的具体类型,这种机制被称为反射。反射也可以让我们将类型本身作为第一类的值类型处理。反射是指在程序运行期对程序本身进行访问和修改的能力,程序在编译时变量被转换为内存地址,原创 2021-07-15 11:46:23 · 1082 阅读 · 28 评论 -
Go语言实现对称加密算法AES、DES、3DES和非对称加密算法RSA
使用GO语言实现对称加密与非对称加密算法原创 2021-07-10 17:59:06 · 2633 阅读 · 22 评论 -
Go语言实现md4、md5、sha256哈希算法加密
目录1. 哈希算法特点2. 常用的哈希算法3. go实现MD加密3.1 MD43.2 MD53. go实现SHA加密最后1. 哈希算法特点不可逆:无法从一个哈希值恢复原始数据,哈希并不加密唯一性:对于特定的数据 只能有一个哈希 并且这个哈希是唯一的防篡改:改变输入数据中的一个字节 导致输出一个完全不同的哈希值2. 常用的哈希算法MD4、MD5、hash1、sha224、sha256、sha384、sha512性能 : md4 > md5 > sha224 > sha256原创 2021-07-10 16:58:41 · 3570 阅读 · 7 评论 -
Go语言实现Base64、Base58编码与解码
目录1. 常见的编码2. go语言实现base64的编码与解码2.1 Base64编码原理2.2 实现Base64的编码与解码3. go语言实现base58编码与解码3.1 base58的编码过程3.2 base58编解码具体实现4. 最后1. 常见的编码base64:26个小写字母、26个大写字母、10个数字、/、+base58(区块链):去掉6个容易混淆的,去掉0,大写的O、大写的I、小写的L、/、+/、+影响双击选择2. go语言实现base64的编码与解码2.1 Base64编码原理2.原创 2021-07-10 16:12:28 · 2142 阅读 · 9 评论 -
【值得收藏】你想知道的并发都在这里【传统并发】与【Go并发】
不要通过共享内存来通信,而是通过通信来共享内存。这篇文章带你拿捏传统并发与Goroutine并发。原创 2021-06-06 21:53:27 · 2429 阅读 · 186 评论 -
Golang String字符串类型转Json格式
Go语言的转换go的string字符串格式转json格式确实有点麻烦,如果不知道json里面的类型好像就构建不了结构体了。package mainimport ( "encoding/json" "fmt")type Data struct { Status int `json:"status"` Msg int `json:"msg"`}func main() { msg := "{\"status\":200, \"msg\":18}" var da原创 2021-03-21 20:51:34 · 31948 阅读 · 3 评论 -
Go语言之并发编程
并发概念在学校,老师课件上是这样定义:并发是指两个或两个以上的事件或活动在同一时间间隔内(时间段)发生,在多道程序处理时,宏观上并发,微观上交替执行(单处理器)书本上是这样定义:(大概意思,记不太清楚了)处理器在一道程序执行并完成之前,可以执行另一道程序,也就实现了多道程序宏观的执行传统并发—共享内存系统传统的并发模型是基于内存共享的,各线程通信,需要共享变量,也需要锁的同步机制。共享变量不但要保证原子性,还要保证其他线程能看到修改后的值。(日后补充)Go并发—消息传递系统与传统的并发原创 2021-02-13 12:43:10 · 420 阅读 · 2 评论 -
关于Go语言中的函数方法
关于Go语言中的函数方法方法是什么函数和方法的区别Go中的“多态”方法是什么func (recv receiver_type) methodName(parameter_list) (return_value_list) { … }在 Go 语言中,结构体就像是类的一种简化形式,那么面向对象程序员可能会问:类的方法在哪里呢?在 Go 中有一个概念,它和方法有着同样的名字,并且大体上意思相同:Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数原创 2021-02-13 11:02:05 · 646 阅读 · 1 评论 -
Golang并发问题
关于Golang的一些问题构建一个无限循环,每五秒输出 i(初值为 1),i 的值随每次输出自增 1,要求在任意过程中都能接受命令行输入,通过回车结束进程。package mainimport ( "bufio" "fmt" "os" "runtime" "sync" "time")var wg1 sync.WaitGroupvar FLAG int = 1func prin() { for i:=1; ;i++ { fmt.Println(i) time.Sle原创 2020-12-23 12:28:17 · 530 阅读 · 1 评论