[{"data":1,"prerenderedAt":1075},["ShallowReactive",2],{"posts:index":3,"$fc5mAvhGn7GtpOqrkVgIXBg5ueD57LZfea6_5hc-GJ28":1044},[4,22,35,48,59,72,85,97,107,118,129,141,153,165,176,188,200,214,228,239,251,261,271,281,292,302,312,324,336,349,361,372,379,390,400,410,420,430,444,456,469,480,491,498,508,518,528,538,548,560,572,584,595,609,621,631,643,655,668,681,690,702,711,723,734,746,758,766,778,790,800,811,821,831,843,855,868,878,888,899,906,916,927,938,945,957,968,982,997,1015,1028],{"categories":5,"date":7,"description":8,"image":9,"path":10,"readingTime":11,"recommend":9,"tags":16,"title":19,"type":20,"updated":21},[6],"Go语言","2025-07-26","介绍 Go Air 热重载工具的安装、初始化和配置方法，提升本地开发与调试效率。",null,"\u002F2025\u002F07\u002Fgo-air",{"text":12,"minutes":13,"time":14,"words":15},"2 min read",1.68,100800,336,[17,18],"Go","开发工具","Go Air 热重载工具使用指南","tech","2025-07-28",{"categories":23,"date":7,"description":24,"image":9,"path":25,"readingTime":26,"recommend":9,"tags":31,"title":34,"type":20,"updated":21},[6],"go-cache 是一个 golang 的缓存库, 用于缓存 k, v 对, 缓存时间过期后存储的值会失效, 底层是一个 map, 过期后内部 Item 是不会自动清除, 需要手动调用DeleteExpired方法清除过期项","\u002F2025\u002F07\u002Fgo-cache",{"text":27,"minutes":28,"time":29,"words":30},"4 min read",3.65,219000,730,[32,33],"Redis","数据库安装","Go Cache 单机缓存使用与原理",{"categories":36,"date":37,"description":38,"image":9,"path":39,"readingTime":40,"recommend":9,"tags":45,"title":47,"type":20,"updated":37},[6],"2025-07-31","MinIO 是一款开源的分布式对象存储服务，兼容 S3 协议，通过 Go SDK 可以轻松实现文件上传，只需初始化客户端并调用 FPutObject 方法即可完成文件存储，支持自定义 Content-Type 和私有化部署，是替代商业 OSS 的高性价比方案。","\u002F2025\u002F07\u002Fgo-minio",{"text":41,"minutes":42,"time":43,"words":44},"3 min read",2.27,136200,454,[46],"ioc","Go 使用 MinIO SDK 上传文件",{"categories":49,"date":7,"description":50,"image":9,"path":51,"readingTime":52,"recommend":9,"tags":56,"title":58,"type":20,"updated":21},[6],"介绍 Go 官方 testing 包的基本用法，包括单元测试、表驱动测试、子测试和覆盖率统计。","\u002F2025\u002F07\u002Fgo-test",{"text":41,"minutes":53,"time":54,"words":55},2.87,172200,574,[17,57],"单元测试","Go 单元测试与覆盖率实践",{"categories":60,"date":7,"description":61,"image":9,"path":62,"readingTime":63,"recommend":9,"tags":68,"title":70,"type":20,"updated":71},[6],"Wire 是 Google 开发的 Go 依赖注入工具，通过自动生成代码管理模块依赖关系，解决手动初始化导致的混乱问题。它使用 wire.Build 定义依赖链，支持接口绑定和构造器集合，执行 wire 命令即可生成初始化代码。虽然学习成本较高，但能显著提升大型项目的可维护性，特别适合与 Gin 等框架集成使用。需注意处理循环依赖和接口绑定，小项目可能增加复杂度。","\u002F2025\u002F07\u002Fgo-wire",{"text":64,"minutes":65,"time":66,"words":67},"10 min read",9.555,573300,1911,[69],"wire","Go Wire 依赖注入实践","2025-08-21",{"categories":73,"date":21,"description":74,"image":9,"path":75,"readingTime":76,"recommend":9,"tags":81,"title":83,"type":20,"updated":84},[6],"gomail是是一款简单高效的邮件发送工具，可用于发送文本，图像，word，pdf等多种复杂格式，并且基于smtp服务器","\u002F2025\u002F07\u002Fgomail",{"text":77,"minutes":78,"time":79,"words":80},"1 min read",0.885,53100,177,[17,82],"邮件发送","Go 使用 Gomail 发送邮件","2025-12-02",{"categories":86,"date":87,"description":88,"image":9,"path":89,"readingTime":90,"recommend":9,"tags":94,"title":96,"type":20,"updated":87},[6],"2025-08-04","在 Go 语言中，channel 是一种用于**协程间通信**的数据结构。根据是否带缓冲区，channel 可分为**无缓冲区**和**有缓冲区**两类。\n\n**无缓冲区的 channel** 是一种同步通信方式，发送和接收必须“当场配对”，发送方在没有接收方的情况下会被挂起，直到数据被接收。这就像一个共享的杯子，只有顾客喝掉牛奶，奶农才能继续挤下一杯。\n\n**有缓冲区的 channel** 则支持异步通信，可以预先存入一定数量的值，只在缓冲区满时才会阻塞发送。它更像一个小型车间，奶农可以提前挤奶放进去，顾客随时取用。\n\n理解这两者的差异对于编写高效的并发程序非常关键，尤其是在处理 goroutine 调度与通信时。\n","\u002F2025\u002F08\u002Fgo-channel1",{"text":27,"minutes":91,"time":92,"words":93},3.29,197400,658,[95],"channel","Go Channel 基础概念与用法",{"categories":98,"date":87,"description":99,"image":9,"path":100,"readingTime":101,"recommend":9,"tags":105,"title":106,"type":20,"updated":87},[6],"带缓冲区的 channel（如容量为 1）允许发送方先发送后接收，不会立即阻塞；而无缓冲区的 channel 发送操作会阻塞当前 goroutine，直到有接收方同步接收，否则会造成死锁。因此缓冲区提供了发送和接收的解耦能力。","\u002F2025\u002F08\u002Fgo-channel2",{"text":77,"minutes":102,"time":103,"words":104},0.49,29400,98,[95],"缓冲区为 1 和无缓冲区的 channel 有什么区别",{"categories":108,"date":87,"description":109,"image":9,"path":110,"readingTime":111,"recommend":9,"tags":116,"title":117,"type":20,"updated":87},[6],"生产者消费者模型通过引入缓冲区，实现了生产与消费的解耦。无缓冲区的 channel 要求生产者与消费者同步配合，否则会阻塞，适合处理必须顺序执行的场景；而有缓冲区的 channel 则允许生产者先发送多个数据，无需等待消费者处理完成，适用于并发处理、异步任务等高性能场景。缓冲区提升了系统的灵活性、并发性和容错性。","\u002F2025\u002F08\u002Fgo-channel3",{"text":112,"minutes":113,"time":114,"words":115},"6 min read",5.135,308100,1027,[95],"Go Channel 生产者消费者模型",{"categories":119,"date":120,"description":121,"image":9,"path":122,"readingTime":123,"recommend":9,"tags":127,"title":128,"type":20,"updated":120},[6],"2025-08-05","`select case` 用于监听多个 channel 的就绪状态，只有当对应的读写操作**不阻塞**时才会执行。无缓冲通道需读写同时存在才就绪，有缓冲通道读需有值、写需未满。若多个 case 同时就绪，`select` 会**随机选择一个执行**，否则执行 `default`。配合 `time.After` 可实现超时控制，是并发中的常用模式。","\u002F2025\u002F08\u002Fgo-channel4",{"text":41,"minutes":124,"time":125,"words":126},2.96,177600,592,[95],"Go Channel 的 Select Case 用法",{"categories":130,"date":131,"description":132,"image":9,"path":133,"readingTime":134,"recommend":9,"tags":138,"title":139,"type":20,"updated":140},[6],"2025-08-07","本文介绍了一个适用于单机模块的 Go 语言事件总线（Eventbus）实现，用于异步事件的发布与订阅。通过 map[string]*EventChans 管理事件与多个通道的映射关系，并结合读写锁 sync.RWMutex 保证并发安全，实现了 Subscribe、UnSubscribe、Publish 三个核心方法，展示了如何安全高效地进行事件分发。适合 Go 初学者理解 channel 和并发控制。","\u002F2025\u002F08\u002Fgo-channel5",{"text":112,"minutes":135,"time":136,"words":137},5.125,307500,1025,[95],"使用 Go Channel 实现简易 EventBus","2025-08-08",{"categories":142,"date":143,"description":144,"image":9,"path":145,"readingTime":146,"recommend":9,"tags":150,"title":152,"type":20,"updated":143},[6],"2025-08-20","Go语言的context包是并发编程的核心工具，主要用于管理goroutine的生命周期、传递取消信号和请求范围数据。通过WithCancel、WithTimeout、WithDeadline和WithValue等方法，可以从根context派生出子context，形成树状结构，实现优雅的协程控制和超时管理。context广泛应用于HTTP请求、数据库操作等场景，确保资源及时释放，避免泄漏。最佳实践包括及时调用cancel()、避免滥用WithValue传递业务参数，以及在goroutine中监听ctx.Done()以响应取消信号","\u002F2025\u002F08\u002Fgo-context1",{"text":27,"minutes":147,"time":148,"words":149},3.64,218400,728,[151],"context","Go Context 原理与使用实践",{"categories":154,"date":140,"description":155,"image":9,"path":156,"readingTime":157,"recommend":9,"tags":161,"title":164,"type":20,"updated":140},[6],"本项目基于 Gin + GORM + MySQL + Redis，实现了一个简单的用户登录注册系统，核心功能包括 JWT 鉴权与 Redis 用户缓存。用户登录成功后签发 JWT，访问受保护接口时通过中间件校验 Token，有效提升接口安全性。用户资料优先从 Redis 获取，未命中则回源数据库并写入缓存，兼顾性能与一致性，适合作为入门级全栈身份认证系统的学习案例。","\u002F2025\u002F08\u002Fgo-jwt-redis-demo",{"text":112,"minutes":158,"time":159,"words":160},5.93,355800,1186,[162,163],"jwt","redis","go jwt和redis实现用户登录注册以及查询",{"categories":166,"date":131,"description":167,"image":9,"path":168,"readingTime":169,"recommend":9,"tags":173,"title":175,"type":20,"updated":131},[6],"Go 中的 `panic` 会导致当前 goroutine 崩溃，若未被 `recover` 捕获，则程序终止。`recover` 需配合 `defer` 使用，只能捕获**当前 goroutine** 内的 panic。若 panic 发生在子 goroutine 中，主 goroutine 的 `recover` 无法捕获，程序仍会崩溃，因此每个 goroutine 内需单独设置 `defer+recover` 才能防止异常扩散。","\u002F2025\u002F08\u002Fgo-panic",{"text":41,"minutes":170,"time":171,"words":172},2.105,126300,421,[174],"panic","Go Panic 与 Recover 异常处理",{"categories":177,"date":71,"description":178,"image":9,"path":179,"readingTime":180,"recommend":9,"tags":185,"title":187,"type":20,"updated":71},[6],"反射是程序在运行时动态访问、检测和修改自身状态的能力，通过反射可以获取类型信息、调用方法或修改字段值。在Go语言中，反射由reflect包实现，核心是reflect.Type（类型接口）和reflect.Value（值结构体），分别对应接口的类型和值部分。反射常用于序列化、ORM框架等场景，但存在性能开销大、代码可读性差、破坏封装性等缺点。优化方法包括缓存反射结果、减少高频调用或使用替代方案（如泛型）。反射适合框架开发等动态需求场景，但业务代码中应谨慎使用","\u002F2025\u002F08\u002Fgo-reflect",{"text":181,"minutes":182,"time":183,"words":184},"25 min read",24.17,1450200,4834,[186],"reflect","Go 反射机制详解",{"categories":189,"date":71,"description":190,"image":9,"path":191,"readingTime":192,"recommend":9,"tags":197,"title":199,"type":20,"updated":71},[6],"Timer 用于一次性计时，可通过 C 通道接收时间；AfterFunc 用于异步回调，不通过 C 通道；Ticker 用于周期性计时；select 多个就绪 case 随机选择，break 仅退出当前块","\u002F2025\u002F08\u002Fgo-timer",{"text":193,"minutes":194,"time":195,"words":196},"5 min read",4.51,270600,902,[151,198],"goroutine","Go Timer 与 Ticker 定时器详解",{"categories":201,"date":71,"description":203,"image":9,"path":204,"readingTime":205,"recommend":9,"tags":209,"title":212,"type":20,"updated":213},[202],"云原生","介绍在 Linux 环境安装 Minikube、配置 Docker 驱动、启动集群并安装 kubectl 的完整步骤。","\u002F2025\u002F08\u002Fminikube-install",{"text":12,"minutes":206,"time":207,"words":208},1.07,64200,214,[210,211],"Kubernetes","Minikube","Minikube 安装与环境配置","2026-06-20",{"categories":215,"date":217,"description":218,"image":9,"path":219,"readingTime":220,"recommend":9,"tags":224,"title":227,"type":20,"updated":217},[216],"数据库","2025-08-26","介绍 MySQL 常用整数、浮点数、字符串、日期时间等数据类型及字段设计注意事项。","\u002F2025\u002F08\u002Fmysql-datastructure",{"text":12,"minutes":221,"time":222,"words":223},1.69,101400,338,[225,226],"MySQL","SQL","MySQL 常用数据类型详解",{"categories":229,"date":217,"description":230,"image":9,"path":231,"readingTime":232,"recommend":9,"tags":236,"title":238,"type":20,"updated":217},[216],"整理 MySQL 日期获取、格式化、时间计算和日期差值等常用函数及使用方法。","\u002F2025\u002F08\u002Fmysql-date-function",{"text":77,"minutes":233,"time":234,"words":235},0.32,19200,64,[225,237],"SQL函数","MySQL 日期与时间函数",{"categories":240,"date":241,"description":242,"image":9,"path":243,"readingTime":244,"recommend":9,"tags":248,"title":250,"type":20,"updated":241},[216],"2025-08-28","介绍 MySQL 四种事务隔离级别、并发读写问题以及不同隔离级别之间的行为差异。","\u002F2025\u002F08\u002Fmysql-isolation-grade",{"text":12,"minutes":245,"time":246,"words":247},1.24,74400,248,[225,249],"数据库事务","MySQL 事务隔离级别详解",{"categories":252,"date":217,"description":253,"image":9,"path":254,"readingTime":255,"recommend":9,"tags":259,"title":260,"type":20,"updated":217},[216],"介绍使用 Navicat 连接和管理 MySQL，并通过图形界面完成数据库与数据表的常见操作。","\u002F2025\u002F08\u002Fmysql-navicat",{"text":77,"minutes":256,"time":257,"words":258},0.15,9000,30,[225,226],"使用 Navicat 图形化管理 MySQL",{"categories":262,"date":217,"description":263,"image":9,"path":264,"readingTime":265,"recommend":9,"tags":269,"title":270,"type":20,"updated":217},[216],"整理 MySQL 中取整、绝对值、随机数、幂运算等常用数值函数及其使用示例。","\u002F2025\u002F08\u002Fmysql-number-function",{"text":77,"minutes":266,"time":267,"words":268},0.39,23400,78,[225,237],"MySQL 常用数值函数",{"categories":272,"date":217,"description":273,"image":9,"path":274,"readingTime":275,"recommend":9,"tags":279,"title":280,"type":20,"updated":217},[216],"介绍 MySQL IF、IFNULL、CASE WHEN 等流程控制函数，并通过示例说明适用场景。","\u002F2025\u002F08\u002Fmysql-progress-function",{"text":77,"minutes":276,"time":277,"words":278},0.4,24000,80,[225,237],"MySQL 流程控制函数",{"categories":282,"date":217,"description":283,"image":9,"path":284,"readingTime":285,"recommend":9,"tags":289,"title":291,"type":20,"updated":217},[216],"介绍 DDL、DML、DQL、DCL 和 TCL 等 SQL 语句分类，并列举常见操作示例。","\u002F2025\u002F08\u002Fmysql-sql-category",{"text":12,"minutes":286,"time":287,"words":288},1.805,108300,361,[225,290],"数据库索引","SQL 语句分类：DDL、DML、DQL 与 DCL",{"categories":293,"date":217,"description":294,"image":9,"path":295,"readingTime":296,"recommend":9,"tags":300,"title":301,"type":20,"updated":217},[216],"整理 MySQL 字符串拼接、截取、替换、长度计算和大小写转换等常用函数。","\u002F2025\u002F08\u002Fmysql-string-function",{"text":41,"minutes":297,"time":298,"words":299},2.02,121200,404,[225,237],"MySQL 常用字符串函数",{"categories":303,"date":241,"description":304,"image":9,"path":305,"readingTime":306,"recommend":9,"tags":310,"title":311,"type":20,"updated":241},[216],"介绍 MySQL 事务的基本概念、ACID 特性以及事务在保证数据一致性方面的作用。","\u002F2025\u002F08\u002Fmysql-what-is-transaction",{"text":77,"minutes":307,"time":308,"words":309},0.75,45000,150,[225,249],"MySQL 事务的概念与特性",{"categories":313,"date":314,"description":315,"image":9,"path":316,"readingTime":317,"recommend":9,"tags":321,"title":323,"type":20,"updated":314},[216],"2025-08-31","这篇文章记录了我在学习极客时间大明老师课程后，对 Redis 在 Go 项目中的实践总结。从初始化 Redis 客户端，到在仓储层引入缓存模块，再到结合 DDD 思想实现数据查询与缓存的解耦，逐步形成了更优雅的使用方式。","\u002F2025\u002F08\u002Fredis-in-golang-practice",{"text":193,"minutes":318,"time":319,"words":320},4.045,242700,809,[163,322],"ddd","Go 项目中的 Redis 缓存实践",{"categories":325,"date":326,"description":327,"image":9,"path":328,"readingTime":329,"recommend":9,"tags":333,"title":335,"type":20,"updated":326},[216],"2025-09-17","分析 Docker 部署 MySQL 后出现中文乱码的原因，并通过服务端与连接字符集配置解决问题。","\u002F2025\u002F09\u002Fdocker-mysql-charset-problem",{"text":77,"minutes":330,"time":331,"words":332},0.845,50700,169,[334],"sql","docker部署mysql中文乱码问题",{"categories":337,"date":338,"description":339,"image":9,"path":340,"readingTime":341,"recommend":9,"tags":345,"title":348,"type":20,"updated":338},[6],"2025-09-30","本文讲述 Go 函数返回值与 defer 执行顺序的关系，通过三个实例分析值类型、具名返回值及引用类型在返回过程中的不同表现。","\u002F2025\u002F09\u002Fgo-defer",{"text":12,"minutes":342,"time":343,"words":344},1.99,119400,398,[346,347],"go","defer","Go Defer 执行机制详解",{"categories":350,"date":351,"description":352,"image":9,"path":353,"readingTime":354,"recommend":9,"tags":358,"title":359,"type":20,"updated":360},[6],"2025-09-24","今天聊一下go的方法提升，在很多源码看到，查资料才发现可以这样用","\u002F2025\u002F09\u002Fgo-method-up",{"text":77,"minutes":355,"time":356,"words":357},0.78,46800,156,[346],"Go 方法提升与嵌入类型","2025-09-27",{"categories":362,"date":363,"description":364,"image":9,"path":365,"readingTime":366,"recommend":9,"tags":370,"title":371,"type":20,"updated":363},[216],"2025-09-01","解析 B+ 树的节点结构、范围查询和磁盘访问优势，说明 MySQL 索引选择 B+ 树的主要原因。","\u002F2025\u002F09\u002Fmysql-bplustree",{"text":77,"minutes":367,"time":368,"words":369},0.01,600,2,[225,290],"MySQL 索引原理：B+ 树",{"categories":373,"date":363,"description":374,"image":9,"path":375,"readingTime":376,"recommend":9,"tags":377,"title":378,"type":20,"updated":363},[216],"介绍 B 树的结构、查找过程与平衡机制，并说明它作为数据库索引数据结构时的基本工作原理。","\u002F2025\u002F09\u002Fmysql-btree",{"text":77,"minutes":367,"time":368,"words":369},[225,290],"MySQL 索引原理：B 树",{"categories":380,"date":363,"description":381,"image":9,"path":382,"readingTime":383,"recommend":9,"tags":387,"title":389,"type":20,"updated":363},[216],"介绍如何通过 MySQL 状态变量统计各类 SQL 的执行频次，用于观察数据库负载与操作分布。","\u002F2025\u002F09\u002Fmysql-execute-rate",{"text":77,"minutes":384,"time":385,"words":386},0.195,11700,39,[225,388],"性能优化","MySQL SQL 执行频次统计",{"categories":391,"date":363,"description":392,"image":9,"path":393,"readingTime":394,"recommend":9,"tags":398,"title":399,"type":20,"updated":363},[216],"介绍 MySQL EXPLAIN 执行计划中的关键字段，并说明如何利用执行计划分析和优化查询。","\u002F2025\u002F09\u002Fmysql-explain",{"text":77,"minutes":395,"time":396,"words":397},0.55,33000,110,[225,290],"MySQL EXPLAIN 执行计划详解",{"categories":401,"date":363,"description":402,"image":9,"path":403,"readingTime":404,"recommend":9,"tags":408,"title":409,"type":20,"updated":363},[216],"介绍 MySQL 聚簇索引、二级索引、唯一索引和复合索引等常见索引类型及其区别。","\u002F2025\u002F09\u002Fmysql-index-category",{"text":77,"minutes":405,"time":406,"words":407},0.085,5100,17,[225,290],"MySQL 索引类型与分类",{"categories":411,"date":363,"description":412,"image":9,"path":413,"readingTime":414,"recommend":9,"tags":418,"title":419,"type":20,"updated":363},[216],"介绍 MySQL 索引的作用、存储方式和查询优化原理，并说明索引对读写性能的影响。","\u002F2025\u002F09\u002Fmysql-index-description",{"text":77,"minutes":415,"time":416,"words":417},0.9,54000,180,[225,290],"MySQL 索引基础与工作原理",{"categories":421,"date":363,"description":422,"image":9,"path":423,"readingTime":424,"recommend":9,"tags":428,"title":429,"type":20,"updated":363},[216],"介绍 MySQL Profiling 等性能分析方法，帮助定位 SQL 执行耗时与查询过程中的性能瓶颈。","\u002F2025\u002F09\u002Fmysql-performance-analyse",{"text":77,"minutes":425,"time":426,"words":427},0.24,14400,48,[225,388],"MySQL 查询性能分析方法",{"categories":431,"date":433,"description":434,"image":9,"path":435,"readingTime":436,"recommend":9,"tags":440,"title":442,"type":20,"updated":443},[432],"微服务","2025-09-15","介绍 protoc 的命令行安装方式、环境变量配置，以及 Go 代码生成插件的安装与验证。","\u002F2025\u002F09\u002Fproto-install",{"text":41,"minutes":437,"time":438,"words":439},2.57,154200,514,[441,432],"gRPC","Protocol Buffers 安装与 Go 插件配置","2025-12-10",{"categories":445,"date":446,"description":447,"image":9,"path":448,"readingTime":449,"recommend":9,"tags":453,"title":455,"type":20,"updated":446},[216],"2025-09-10","整理 Redis 键查询、删除、判断存在、设置过期时间和查看类型等通用操作命令。","\u002F2025\u002F09\u002Fredis-common-commands",{"text":77,"minutes":450,"time":451,"words":452},0.385,23100,77,[32,454],"缓存","Redis 通用键命令详解",{"categories":457,"date":458,"description":459,"image":9,"path":460,"readingTime":461,"recommend":9,"tags":465,"title":467,"type":20,"updated":468},[216],"2025-09-25","分析 Redis 缓存穿透、缓存击穿和缓存雪崩的成因、区别及常见应对方案。","\u002F2025\u002F09\u002Fredis-ctjcxb",{"text":27,"minutes":462,"time":463,"words":464},3.66,219600,732,[32,466],"缓存安全","Redis 缓存穿透、击穿与雪崩","2026-06-09",{"categories":470,"date":446,"description":471,"image":9,"path":472,"readingTime":473,"recommend":9,"tags":477,"title":479,"type":20,"updated":446},[216],"介绍 Redis String、Hash、List、Set 和 Sorted Set 等核心数据类型及适用场景。","\u002F2025\u002F09\u002Fredis-data-types",{"text":77,"minutes":474,"time":475,"words":476},0.23,13800,46,[32,478],"数据结构","Redis 核心数据类型详解",{"categories":481,"date":446,"description":482,"image":9,"path":483,"readingTime":484,"recommend":9,"tags":488,"title":489,"type":20,"updated":490},[216],"整理 Redis Hash 类型的字段写入、读取、删除、遍历和批量操作等常用命令。","\u002F2025\u002F09\u002Fredis-hash-command",{"text":77,"minutes":485,"time":486,"words":487},0.18,10800,36,[32,478],"Redis Hash 常用命令","2025-09-11",{"categories":492,"date":446,"description":493,"image":9,"path":494,"readingTime":495,"recommend":9,"tags":496,"title":497,"type":20,"updated":446},[216],"介绍使用 Docker 安装 Redis、配置密码、启动服务并通过 redis-cli 连接实例的完整过程。","\u002F2025\u002F09\u002Fredis-install",{"text":77,"minutes":395,"time":396,"words":397},[32,33],"Redis 安装、启动与连接",{"categories":499,"date":446,"description":500,"image":9,"path":501,"readingTime":502,"recommend":9,"tags":506,"title":507,"type":20,"updated":490},[216],"整理 Redis List 类型的左右插入、范围查询、弹出元素和阻塞读取等常用命令。","\u002F2025\u002F09\u002Fredis-list-command",{"text":12,"minutes":503,"time":504,"words":505},1.035,62100,207,[32,478],"Redis List 常用命令",{"categories":509,"date":446,"description":510,"image":9,"path":511,"readingTime":512,"recommend":9,"tags":516,"title":517,"type":20,"updated":446},[216],"介绍关系型数据库与 NoSQL 数据库的区别，并说明 Redis 等 NoSQL 数据库的特点和使用场景。","\u002F2025\u002F09\u002Fredis-nosql",{"text":77,"minutes":513,"time":514,"words":515},0.025,1500,5,[32,454],"NoSQL 数据库基础概念",{"categories":519,"date":446,"description":520,"image":9,"path":521,"readingTime":522,"recommend":9,"tags":526,"title":527,"type":20,"updated":490},[216],"整理 Redis Set 集合的元素增删、成员查询、集合遍历以及交并差集等常用命令。","\u002F2025\u002F09\u002Fredis-set-command",{"text":77,"minutes":523,"time":524,"words":525},0.64,38400,128,[32,478],"Redis Set 常用命令",{"categories":529,"date":446,"description":530,"image":9,"path":531,"readingTime":532,"recommend":9,"tags":536,"title":537,"type":20,"updated":490},[216],"整理 Redis Sorted Set 的成员写入、分数排序、区间查询和排名统计等常用命令。","\u002F2025\u002F09\u002Fredis-sorted-set-command",{"text":77,"minutes":533,"time":534,"words":535},0.685,41100,137,[32,478],"Redis Sorted Set 常用命令",{"categories":539,"date":446,"description":540,"image":9,"path":541,"readingTime":542,"recommend":9,"tags":546,"title":547,"type":20,"updated":446},[216],"整理 Redis String 类型的设置、读取、批量操作、过期时间与数值增减等常用命令。","\u002F2025\u002F09\u002Fredis-string-command",{"text":77,"minutes":543,"time":544,"words":545},0.42,25200,84,[32,478],"Redis String 常用命令",{"categories":549,"date":550,"description":551,"image":9,"path":552,"readingTime":553,"recommend":9,"tags":558,"title":559,"type":20,"updated":550},[216],"2025-09-05","这篇文章记录了一次大数据报表导出的优化实践。业务需求要求一次性导出10万条数据到Excel，最初采用全表扫描配合OFFSET分页，单次导出耗时超过30秒。经过分析慢查询日志，发现主要瓶颈在SQL层面和Excel写入方式。优化过程包括：只查询必要字段、去除无效条件、并发分片查询、流式写入Excel、最后引入游标分页避免大OFFSET扫描。最终导出耗时降至8秒。本文总结了SQL调优、分页策略以及大规模数据导出的关键经验。","\u002F2025\u002F09\u002Freport-export-optimization-from-offset-to-cursor-pagination",{"text":554,"minutes":555,"time":556,"words":557},"8 min read",7.44,446400,1488,[198,334],"10万行报表导出优化实战：从 OFFSET 到游标分页",{"categories":561,"date":563,"description":564,"image":9,"path":565,"readingTime":566,"recommend":9,"tags":570,"title":571,"type":20,"updated":563},[562],"后端开发","2025-09-28","短信验证码业务主要流程是用户请求后端，后端生成随机 6 位验证码，存入 Redis 缓存并调用腾讯云短信 SDK 发送到用户手机。前端提示短信发送成功，用户再输入验证码完成验证。为了防止接口被滥用，需要增加限流、图片验证码或签名加密等保护措施。","\u002F2025\u002F09\u002Ftecent-sms-send",{"text":27,"minutes":567,"time":568,"words":569},3.98,238800,796,[346],"Go 接入腾讯云短信服务",{"categories":573,"date":363,"description":575,"image":9,"path":576,"readingTime":577,"recommend":9,"tags":581,"title":583,"type":20,"updated":550},[574],"成长随笔","在浮躁与内卷的社会中，保持专注与冷静，缓慢向上，也是最难得的成长勇气。","\u002F2025\u002F09\u002Fthe-courage-to-grow-slowly",{"text":12,"minutes":578,"time":579,"words":580},1.49,89400,298,[582],"life","不急于求成，才是最长远的成长",{"categories":585,"date":458,"description":586,"image":9,"path":587,"readingTime":588,"recommend":9,"tags":592,"title":594,"type":20,"updated":360},[574],"从个人成长和现实选择出发，讨论勇敢的含义，以及面对困难、未知与责任时应有的态度。","\u002F2025\u002F09\u002Fwhat-is-brave",{"text":12,"minutes":589,"time":590,"words":591},1.2,72000,240,[593],"觉悟","什么是勇敢",{"categories":596,"date":597,"description":598,"image":9,"path":599,"readingTime":600,"recommend":9,"tags":605,"title":607,"type":20,"updated":608},[216],"2025-10-28","介绍 Canal 的工作原理、服务端安装配置、Docker 部署方式以及 Go 客户端订阅 Binlog 的实践。","\u002F2025\u002F10\u002Fcanal",{"text":601,"minutes":602,"time":603,"words":604},"12 min read",11.84,710400,2368,[606],"canal","Canal 安装配置与 Go 客户端实践","2026-01-15",{"categories":610,"date":611,"description":612,"image":9,"path":613,"readingTime":614,"recommend":9,"tags":618,"title":620,"type":20,"updated":611},[216],"2025-10-27","elasticsearch是一个分布式搜索引擎，本文讲述了elasticsearch的安装与使用","\u002F2025\u002F10\u002Felasticsearch",{"text":41,"minutes":615,"time":616,"words":617},2.265,135900,453,[619],"es","Elasticsearch 安装与基础操作",{"categories":622,"date":611,"description":623,"image":9,"path":624,"readingTime":625,"recommend":9,"tags":629,"title":630,"type":20,"updated":611},[216],"go-elasticsearch v9版本go api的用法","\u002F2025\u002F10\u002Felasticsearch-go",{"text":27,"minutes":626,"time":627,"words":628},3.39,203400,678,[619],"go-elasticsearch使用指南",{"categories":632,"date":633,"description":634,"image":9,"path":635,"readingTime":636,"recommend":9,"tags":640,"title":641,"type":20,"updated":642},[6],"2025-10-30","go-zap日志双写，日志切割，使用的zap库中的sugar版本","\u002F2025\u002F10\u002Fgo-zap",{"text":41,"minutes":637,"time":638,"words":639},2.84,170400,568,[346],"Go Zap实现日志双写和切割","2025-10-31",{"categories":644,"date":597,"description":646,"image":9,"path":647,"readingTime":648,"recommend":9,"tags":652,"title":654,"type":20,"updated":597},[645],"工程实践","介绍 kafka-go 的安装与使用，并通过 Go 示例实现消息生产、消费和偏移量读取。","\u002F2025\u002F10\u002Fkafka-go",{"text":12,"minutes":649,"time":650,"words":651},1.385,83100,277,[653],"kafka","使用 kafka-go 实现消息生产与消费",{"categories":656,"date":657,"description":658,"image":9,"path":659,"readingTime":660,"recommend":9,"tags":664,"title":667,"type":20,"updated":657},[432],"2025-10-25","记录 VS Code 开发 Kratos 时 Proto 文件跨目录引用报错的原因，以及插件配置解决方法。","\u002F2025\u002F10\u002Fkratos-proto-error",{"text":77,"minutes":661,"time":662,"words":663},0.145,8700,29,[665,666],"bug","kratos","kratos中proto文件引入其他proto爆红",{"categories":669,"date":670,"description":671,"image":9,"path":672,"readingTime":673,"recommend":9,"tags":678,"title":680,"type":20,"updated":84},[645],"2025-11-10","Gitlab使用教程以及CI\u002FCD的配置，触发工作流，减少手动部署的成本","\u002F2025\u002F11\u002Fgitlab-ci",{"text":674,"minutes":675,"time":676,"words":677},"7 min read",6.22,373200,1244,[679],"gitlab","GitLab Runner 使用与 CICD 全面指南",{"categories":682,"date":683,"description":684,"image":9,"path":685,"readingTime":686,"recommend":9,"tags":687,"title":689,"type":20,"updated":683},[645],"2025-11-18","介绍 Webhook 的事件通知机制、典型使用场景，并使用 Go 和 Gin 实现简单的回调接口。","\u002F2025\u002F11\u002Fwhat-is-webhook",{"text":12,"minutes":589,"time":590,"words":591},[688],"webhook","Webhook 工作原理与 Go 实现",{"categories":691,"date":692,"description":693,"image":9,"path":694,"readingTime":695,"recommend":9,"tags":699,"title":700,"type":20,"updated":701},[432],"2025-12-16","介绍 gRPC 的普通调用、客户端流、服务端流和双向流四种通信模式，并给出 Go 示例。","\u002F2025\u002F12\u002Fgrpc-4method",{"text":12,"minutes":696,"time":697,"words":698},1.965,117900,393,[441,432],"gRPC 四种通信模式详解","2026-01-05",{"categories":703,"date":704,"description":705,"image":9,"path":706,"readingTime":707,"recommend":9,"tags":708,"title":710,"type":20,"updated":704},[432],"2025-12-09","解析 gRPC 基于 HTTP\u002F2 和 Protocol Buffers 的通信流程，以及客户端与服务端调用的核心机制。","\u002F2025\u002F12\u002Fgrpc-internals",{"text":77,"minutes":405,"time":406,"words":407},[441,709],"网络通信","gRPC 工作原理与通信流程",{"categories":712,"date":713,"description":714,"image":9,"path":715,"readingTime":716,"recommend":9,"tags":720,"title":722,"type":20,"updated":713},[645],"2025-12-28","mcp server原理理解，实操教程，ai客户端引入以及对ai编程的一些看法","\u002F2025\u002F12\u002Fmcp-server-intro",{"text":112,"minutes":717,"time":718,"words":719},5.035,302100,1007,[721],"mcp","MCP Server 基础概念与入门实践",{"categories":724,"date":704,"description":725,"image":9,"path":726,"readingTime":727,"recommend":9,"tags":731,"title":732,"type":20,"updated":733},[432],"系统介绍 Protocol Buffers 的消息、字段、枚举、服务、导入、oneof 和包装类型等核心语法。","\u002F2025\u002F12\u002Fproto-syntax",{"text":674,"minutes":728,"time":729,"words":730},6.685,401100,1337,[441,432],"Protocol Buffers 核心语法详解","2025-12-11",{"categories":735,"date":84,"description":737,"image":9,"path":738,"readingTime":739,"recommend":9,"tags":743,"title":745,"type":20,"updated":84},[736],"技术观察","介绍短视频推荐系统中的用户画像、内容特征和召回排序思路，并结合业务需求分析实现方向。","\u002F2025\u002F12\u002Frecemmend-algorithm",{"text":27,"minutes":740,"time":741,"words":742},3.785,227100,757,[744],"algorithm","短视频的推荐算法",{"categories":747,"date":748,"description":749,"image":9,"path":750,"readingTime":751,"recommend":9,"tags":755,"title":757,"type":20,"updated":748},[645],"2026-01-21","git-filter-repo清理敏感信息，防止git提交了敏感信息后导致的密钥泄漏","\u002F2026\u002F01\u002Fgit-filter-repo",{"text":27,"minutes":752,"time":753,"words":754},3.63,217800,726,[756],"git","git-filter-repo 清理敏感信息",{"categories":759,"date":760,"description":761,"image":9,"path":762,"readingTime":763,"recommend":9,"tags":764,"title":765,"type":20,"updated":760},[432],"2026-01-01","通过 Protocol Buffers 定义服务，生成 Go 代码并实现客户端与服务端，完成首个 gRPC 示例。","\u002F2026\u002F01\u002Fgrpc-hello-demo",{"text":12,"minutes":221,"time":222,"words":223},[441,432],"使用 Go 构建第一个 gRPC 服务",{"categories":767,"date":701,"description":768,"image":9,"path":769,"readingTime":770,"recommend":9,"tags":774,"title":776,"type":20,"updated":777},[432],"介绍 gRPC Metadata 的创建、发送和读取方法，以及 Header、Trailer 在客户端与服务端之间的传递。","\u002F2026\u002F01\u002Fgrpc-metadata",{"text":12,"minutes":771,"time":772,"words":773},1.995,119700,399,[441,775],"Metadata","gRPC Metadata 的传递与使用","2026-01-07",{"categories":779,"date":780,"description":781,"image":9,"path":782,"readingTime":783,"recommend":9,"tags":787,"title":788,"type":20,"updated":789},[645],"2026-02-15","介绍如何通过 GitHub Actions 和 Semantic Release 自动生成版本号、Tag 与发布记录。","\u002F2026\u002F02\u002Fgit-semantic-release",{"text":12,"minutes":784,"time":785,"words":786},1.13,67800,226,[756],"Github CI自动发版","2026-02-18",{"categories":791,"date":792,"description":793,"image":9,"path":794,"readingTime":795,"recommend":9,"tags":798,"title":799,"type":20,"updated":792},[6],"2026-02-20","Go遍历时候删除元素时候的坑，不能正序删除，不然会引起索引错位","\u002F2026\u002F02\u002Fgo-delete-element-in-range",{"text":12,"minutes":369,"time":796,"words":797},120000,400,[346],"Go遍历时删除特定元素",{"categories":801,"date":802,"description":803,"image":9,"path":804,"readingTime":805,"recommend":9,"tags":809,"title":810,"type":20,"updated":802},[6],"2026-02-19","Golang中的优雅关闭与退出，去做一些日志刷盘、关闭基础设施和goroutine连接的操作。","\u002F2026\u002F02\u002Fgo-graceful-shutdown",{"text":41,"minutes":806,"time":807,"words":808},2.26,135600,452,[346],"Golang中的优雅关闭与退出",{"categories":812,"date":789,"description":813,"image":9,"path":814,"readingTime":815,"recommend":9,"tags":819,"title":820,"type":20,"updated":789},[216],"整理 MySQL 开发中常用的表结构操作，包括字段新增、修改、删除以及表结构维护相关 SQL。","\u002F2026\u002F02\u002Fmysql-dev-table",{"text":77,"minutes":816,"time":817,"words":818},0.055,3300,11,[225,226],"MySQL 表结构常用操作",{"categories":822,"date":789,"description":823,"image":9,"path":824,"readingTime":825,"recommend":9,"tags":829,"title":830,"type":20,"updated":789},[216],"整理 MySQL 用户创建、授权、权限查看、权限刷新和用户删除等常用管理操作。","\u002F2026\u002F02\u002Fmysql-dev-user",{"text":12,"minutes":826,"time":827,"words":828},1.22,73200,244,[225,226],"MySQL 用户与权限管理",{"categories":832,"date":833,"description":834,"image":9,"path":835,"readingTime":836,"recommend":9,"tags":840,"title":842,"type":20,"updated":833},[216],"2026-02-27","介绍 MySQL 主从复制原理，并使用 Docker Compose 完成主库、从库和复制账号的配置。","\u002F2026\u002F02\u002Fmysql-master-slave-copy",{"text":112,"minutes":837,"time":838,"words":839},5.045,302700,1009,[841],"mysql","MySQL 主从复制搭建与配置",{"categories":844,"date":845,"description":846,"image":9,"path":847,"readingTime":848,"recommend":9,"tags":852,"title":853,"type":20,"updated":854},[216],"2026-03-10","利用 gh-ost 安全、实时地迁移数据，实现大表结构变更，无停机、无锁表。","\u002F2026\u002F03\u002Fgh-ost-migrate-mysql-online",{"text":27,"minutes":849,"time":850,"words":851},3.215,192900,643,[841],"千万级 Mysql 表结构变更实战","2026-05-06",{"categories":856,"date":857,"description":858,"image":9,"path":859,"readingTime":860,"recommend":9,"tags":864,"title":867,"type":20,"updated":857},[432],"2026-04-12","介绍 Kratos 配置文件的组织方式、配置加载流程以及在服务中读取和使用配置的方法。","\u002F2026\u002F04\u002Fkratos-config",{"text":77,"minutes":861,"time":862,"words":863},0.27,16200,54,[865,866],"Kratos","Protobuf","Kratos 配置管理实践",{"categories":869,"date":857,"description":870,"image":9,"path":871,"readingTime":872,"recommend":9,"tags":876,"title":877,"type":20,"updated":857},[432],"解析 Kratos 项目的目录结构和各层职责，说明 service、biz、data 与 server 等模块的关系。","\u002F2026\u002F04\u002Fkratos-folder",{"text":41,"minutes":873,"time":874,"words":875},3.005,180300,601,[865,866],"Kratos 项目目录结构详解",{"categories":879,"date":857,"description":880,"image":9,"path":881,"readingTime":882,"recommend":9,"tags":886,"title":887,"type":20,"updated":857},[432],"整理 Kratos 项目运行、构建、添加 Proto 文件和生成服务代码等常用命令。","\u002F2026\u002F04\u002Fkratos-instruction",{"text":77,"minutes":883,"time":884,"words":885},0.17,10200,34,[865,866],"Kratos 常用命令速查",{"categories":889,"date":857,"description":890,"image":9,"path":891,"readingTime":892,"recommend":9,"tags":896,"title":898,"type":20,"updated":857},[432],"介绍 Kratos 日志组件的使用方式，并演示文件输出、Helper 封装以及与 Zap 日志库的集成。","\u002F2026\u002F04\u002Fkratos-logger",{"text":41,"minutes":893,"time":894,"words":895},2.695,161700,539,[865,897],"日志","Kratos 日志系统与 Zap 集成",{"categories":900,"date":857,"description":901,"image":9,"path":902,"readingTime":903,"recommend":9,"tags":904,"title":905,"type":20,"updated":857},[432],"介绍 Kratos HTTP 服务中的请求处理、路由注册和 transport\u002Fhttp 组件的基本使用方式。","\u002F2026\u002F04\u002Fkratos-request",{"text":77,"minutes":661,"time":662,"words":663},[865,432],"Kratos HTTP 请求与路由配置",{"categories":907,"date":857,"description":908,"image":9,"path":909,"readingTime":910,"recommend":9,"tags":914,"title":915,"type":20,"updated":857},[432],"介绍如何在 Kratos 中自定义 HTTP 成功响应与错误响应，并结合 Proto 错误码统一接口格式。","\u002F2026\u002F04\u002Fkratos-resp-proxy",{"text":193,"minutes":911,"time":912,"words":913},4.525,271500,905,[865,866],"Kratos 自定义 HTTP 响应与错误处理",{"categories":917,"date":857,"description":918,"image":9,"path":919,"readingTime":920,"recommend":9,"tags":924,"title":926,"type":20,"updated":857},[432],"介绍 Kratos 接入 Consul 实现服务注册与发现，包括 Consul 部署、启动和客户端配置。","\u002F2026\u002F04\u002Fkratos-svc-discover",{"text":77,"minutes":921,"time":922,"words":923},0.745,44700,149,[865,925],"服务发现","Kratos 服务注册与发现实践",{"categories":928,"date":857,"description":929,"image":9,"path":930,"readingTime":931,"recommend":9,"tags":935,"title":937,"type":20,"updated":857},[432],"介绍 Kratos 项目中的事务抽象方法，并通过接口解耦解决 data 与 biz 层之间的循环依赖。","\u002F2026\u002F04\u002Fkratos-transaction",{"text":27,"minutes":932,"time":933,"words":934},3.2,192000,640,[865,936],"事务管理","Kratos 事务管理与循环依赖解决方案",{"categories":939,"date":857,"description":940,"image":9,"path":941,"readingTime":942,"recommend":9,"tags":943,"title":944,"type":20,"updated":857},[432],"介绍 VS Code 中 Protobuf 插件与导入路径的配置方法，解决 Kratos Proto 文件引用报错问题。","\u002F2026\u002F04\u002Fkratos-vscode-proto",{"text":77,"minutes":405,"time":406,"words":407},[865,866],"VS Code 中配置 Protobuf 开发环境",{"categories":946,"date":854,"description":947,"image":9,"path":948,"readingTime":949,"recommend":9,"tags":953,"title":955,"type":20,"updated":956},[645],"本文围绕 wrk 压测工具展开，从基础使用到结果分析，结合错误率、尾延迟（P95\u002FP99）、稳定性等核心指标，给出一套可落地的评估方法，用于定位系统性能瓶颈并计算稳定状态下的最大可承载吞吐量。","\u002F2026\u002F05\u002Fwrk",{"text":193,"minutes":950,"time":951,"words":952},4.395,263700,879,[954],"wrk","wrk HTTP 压测工具使用与指标分析","2026-06-10",{"categories":958,"date":959,"description":960,"image":9,"path":961,"readingTime":962,"recommend":9,"tags":966,"title":967,"type":20,"updated":213},[202],"2026-06-19","介绍如何将远程 Minikube 集群的 kubeconfig 迁移到本地，处理证书数据、虚拟 IP、Docker 端口映射与 TLS 证书校验问题，实现本地 kubectl 管理远程 Kubernetes。","\u002F2026\u002F06\u002Flocal-kubectl-manage-remote",{"text":41,"minutes":963,"time":964,"words":965},2.99,179400,598,[210,211],"本地 kubectl 管理远程",{"categories":969,"date":970,"description":971,"image":9,"path":972,"readingTime":973,"recommend":9,"tags":978,"title":981,"type":20,"updated":970},[574],"2026-06-14","古人云：“活到老，学到老。”互联网算是最辛苦的行业之一，“加班”对工程师来说已是“家常便饭”，同时互联网技术又日新月异，很多工程师都疲于应付，叫苦不堪。以至于长期以来流传一个很广的误解：35岁是程序员工作的终点。  如何在繁忙的工作中做好技术积累，构建个人核心竞争力，相信是很多工程师同行","\u002F2026\u002F06\u002Fstudy-vs-work",{"text":974,"minutes":975,"time":976,"words":977},"57 min read",56.51,3390600,11302,[979,980],"职业成长","技术积累","工作中如何做好技术积累",{"categories":983,"date":984,"description":985,"image":9,"path":986,"readingTime":987,"recommend":9,"tags":992,"title":996,"type":20,"updated":984},[202],"2026-07-29","从日志链路设计开始，完整介绍 Elasticsearch、Kibana 与 Fluent Bit 的部署、鉴权、持久化、Kubernetes 元数据补充、索引验证及常见故障排查。","\u002F2026\u002F07\u002Fk8s-logs-to-elk-with-fluent-bit",{"text":988,"minutes":989,"time":990,"words":991},"17 min read",16.845,1010700,3369,[210,993,994,995,897],"Fluent Bit","Elasticsearch","Kibana","使用 Fluent Bit 将 Kubernetes 日志采集到 ELK",{"categories":998,"date":1000,"description":1001,"image":9,"path":1002,"readingTime":1003,"recommend":9,"tags":1007,"title":1013,"type":20,"updated":1014},[999],"移动开发","2026-08-04","记录在 macOS 上连接华为 Android 真机运行 Flutter 项目的完整过程，包含 ADB 无线配对与连接、USB 调试、MTP 模式、adb devices 为空及首次 Gradle 构建排查。","\u002F2026\u002F08\u002Fflutter-huawei-usb-device-debugging",{"text":601,"minutes":1004,"time":1005,"words":1006},11.1,666000,2220,[1008,1009,1010,1011,1012],"Flutter","Android","ADB","华为","macOS","macOS 使用华为手机调试 Flutter：ADB 设备为空排查","2026-08-06",{"categories":1016,"date":1017,"description":1018,"image":9,"path":1019,"readingTime":1020,"recommend":9,"tags":1025,"title":1027,"type":20,"updated":1017},[999],"2026-08-02","记录在 Apple Silicon Mac 上搭建 Flutter 开发环境的完整过程，包括 Android Studio、Android SDK、模拟器、Xcode、CocoaPods、代理配置以及 flutter doctor 常见问题。","\u002F2026\u002F08\u002Fflutter-macos-environment-setup",{"text":1021,"minutes":1022,"time":1023,"words":1024},"14 min read",13.925,835500,2785,[1008,1009,1026,1012],"iOS","macOS 搭建 Flutter Android 与 iOS 开发环境",{"categories":1029,"date":1030,"description":1031,"image":9,"path":1032,"readingTime":1033,"recommend":9,"tags":1038,"title":1043,"type":20,"updated":1030},[6],"2026-08-13","通过 lestrrat-go\u002Fjwx v4 完成一个 JWS 示例：使用 OpenSSL 生成 RSA 密钥，解析 PEM 文件，以 RS256 对 JSON 载荷签名，并使用公钥验证签名。","\u002F2026\u002F08\u002Fgo-jws",{"text":1034,"minutes":1035,"time":1036,"words":1037},"23 min read",22.785,1367100,4557,[17,1039,1040,1041,1042],"JWS","RS256","RSA","JOSE","Go 使用 JWS 与 RS256 实现私钥签名、公钥验签",{"total":1045,"annual":1048,"categories":1057,"tags":1074},{"posts":1046,"words":1047},93,70998,{"2024":1049,"2025":1051,"2026":1054},{"posts":369,"words":1050},4056,{"posts":1052,"words":1053},65,33816,{"posts":1055,"words":1056},26,33126,[1058,1060,1062,1064,1065,1067,1069,1070,1072,1073],{"name":1059,"posts":369},"未分类",{"name":6,"posts":1061},22,{"name":202,"posts":1063},3,{"name":216,"posts":487},{"name":432,"posts":1066},16,{"name":562,"posts":1068},1,{"name":574,"posts":1063},{"name":645,"posts":1071},7,{"name":736,"posts":1068},{"name":999,"posts":369},[17,18,32,33,46,57,69,82,95,151,162,163,174,186,198,210,211,225,226,237,249,290,322,334,346,347,388,441,432,454,466,478,582,593,606,619,653,665,666,679,688,709,721,744,756,775,841,865,866,897,925,936,954,979,980,993,994,995,1008,1009,1010,1011,1012,1026,1039,1040,1041,1042],1786555052636]