- 博客(275)
- 资源 (1)
- 收藏
- 关注
原创 rust 动态分发 dyn
Rust中的动态分发(dyn)与静态分发(泛型)的区别与应用场景。动态分发通过dyn关键字实现运行时多态,适用于需要存储异构类型(如let animals: Vec<&dyn Animal> = vec![&dog, &cat])或动态选择实现的场景;静态分发通过泛型在编译期确定类型,性能更高但可能导致代码膨胀。文章通过Animal trait的示例对比了两种方式,并指出动态分发需搭配Box或引用使用。最后总结了适用场景:动态分发适合跨模块抽象、异构集合和运行时灵活性,静态分发则更适合性能敏感和类型固定的需
2026-03-24 16:33:14
355
原创 protobuf buf.build使用
本文介绍了使用buf.build替代传统protoc的方案,解决团队协作中.proto文件管理和代码生成的问题。buf.build提供BSR(远程.proto仓库)和Buf CLI(类似git+protoc组合工具),支持初始化配置、语法检查、格式化、代码生成等功能。通过示例演示了从创建.proto文件、生成Go代码到推送远程仓库的完整流程,相比传统protoc命令更结构化且便于团队协作。
2026-03-19 17:39:07
396
原创 如何理解rust中的异步运行时(Tokio)
Tokio是干嘛的?本文对比了用户态线程(协程)与操作系统线程的性能差异,分析了Rust的Tokio异步运行时模型,包括: 用户态线程(协程)相比系统线程更轻量,节省资源开销 Tokio运行时基于异步/await实现协作式并发,通过任务调度而非线程切换提高性能 对比实验显示Tokio在高并发I/O场景下内存占用更低,任务切换成本更小,指出CPU密集型任务更适合多线程,而I/O密集型任务Tokio优势明显 文章通过代码示例展示了Tokio的异步编程模型和性能优势,为高并发应用开发提供了技术选型参考。
2026-03-18 15:20:22
371
原创 Prettier 格式化代码
Prettier是一款流行的代码格式化工具,支持JavaScript、CSS、Vue、React等多种语言,并能与主流编辑器集成。其核心功能包括:通过npm install安装后,使用npx prettier --write .批量格式化工程文件;Husky和lint-staged实现Git提交时仅格式化暂存区文件;VSCode中通过插件配置实现保存时自动格式化(开启formatOnSave指定Prettier为默认格式化工具)。对于非默认支持的语言(如PHP、Rust)需安装额外插件
2026-03-17 16:01:28
402
原创 rust中生命周期使用
本文介绍了Go、C和Rust三种语言处理内存安全的不同机制。Go通过GC和逃逸分析自动管理内存;C需要手动分配/释放堆内存,否则会产生悬垂引用;Rust通过所有权系统和生命周期机制,在编译阶段就确保引用的有效性,避免悬垂引用问题。文章还详细对比了Rust中所有权类型和引用类型的区别,并说明了生命周期标注的基本语法规则,展示了Rust如何通过编译器保障内存安全。
2026-03-16 11:03:43
425
原创 rust中的Clippy
Rust 官方工具 Clippy 是一个强大的代码检查器,专注于提升代码质量而非仅检查编译通过。它能捕捉常见错误、统一代码风格、提供性能优化建议,并帮助开发者学习 Rust 最佳实践。通过 cargo clippy 命令即可使用,支持自动修复(--fix)和 CI/CD 集成(-D warnings)。用户可通过 clippy.toml 配置文件或代码属性(#[allow]/#[warn])定制规则,并选择不同严格度的检查组(如默认、pedantic)。建议项目初期引入 Clippy,结合 Git Hook
2026-03-09 14:42:48
386
原创 rust中的宏
Rust语言宏编程的基础概念和语法。宏是Rust的元编程工具,在编译期展开代码,可分为声明式宏(macro_rules!)和过程宏两类。声明式宏通过匹配模式生成代码,支持无参数、固定参数和可变参数调用。过程宏更强大但复杂,包括派生宏和属性宏等。文章通过具体示例演示了宏的定义和调用方法,并对比了宏与函数的区别,帮助读者快速掌握Rust宏编程的核心要点。
2026-03-06 17:48:34
401
原创 go.dev博客阅读-The Green Tea Garbage Collector(绿茶垃圾回收)
Go 1.25 引入实验性垃圾回收器"Green Tea",通过优化内存访问模式提升GC性能。传统GC采用随机对象扫描方式导致CPU缓存命中率低,而Green Tea改为按8KB内存页为单位处理,提高数据局部性。新技术利用页内累积扫描和CPU向量指令(如AVX-512),使GC耗时减少10-40%。该特性将在Go 1.26成为默认选项,开发者可通过GOEXPERIMENT=greenteagc提前体验。这一改进无需代码变更即可获得更优性能。
2026-03-03 14:08:59
637
原创 go.dev博客阅读-Allocating on the Stack(堆栈分配优化)
Go官方博客介绍了1.24-1.26版本对切片栈分配的优化:通过让更多切片分配在栈上而非堆上,减少GC开销和扩容冗余。优化包括:常量大小切片直接栈分配(1.24);变量容量≤32字节自动栈分配(1.25);append创建的切片自动分配栈上初始空间(1.26);逃逸切片中间过程栈分配+按需堆拷贝(1.26)。这些优化无需修改代码即可减少堆分配,提升性能,体现了Go"开发者专注业务,编译器负责性能"的设计理念。
2026-03-03 13:55:14
602
原创 windows11 OpenClaw部署,接入discord通讯
OpenClaw是一款连接通讯软件与本地AI的工具,可将聊天消息转化为计算机操作指令。它通过Discord等平台接收用户消息,处理后调用大模型生成响应并执行本地操作(如文件管理、代码修改等)。安装需Node环境,配置包括大模型API、通讯平台token和技能模块。其核心价值在于实现远程通过聊天软件操控本地计算机,提升AI的精准执行能力。安装过程包含初始化配置、网关部署等步骤,支持Windows系统。
2026-02-06 10:57:09
2741
2
原创 哈希函数是什么,go/php实现
哈希函数是将任意长度输入映射为固定长度二进制输出的函数,结果值无业务意义。常见误区包括:哈希结果是二进制而非字符串;直接打印可能乱码;存储时通常转为16进制字符串。MD5等不同哈希算法输出长度不同,但都不可逆推原始值。Go语言中可使用MurmurHash3(高效低冲突)或标准库crypto/md5实现,存储时建议用hex.EncodeToString转为16进制字符串。哈希冲突是正常现象,需业务层二次处理。哈希值具有幂等性,相同输入永远输出相同结果。
2026-01-30 14:18:46
767
原创 golang 条件编译控制
本文介绍了Go语言中//go:build debug指令的用法: 添加该指令的文件默认不编译,需通过-tags debug参数显式包含 This file may be excluded due to its build tags; try adding "-tags=<build tag>" to your gopls "buildFlags" configuration See the documentation for more information on working with build t
2026-01-20 14:06:48
64
原创 redis 的内存清理
Redis内存优化、Redis内存释放、Redis配置调优、maxmemory参数、Redis淘汰策略、Redis过期删除
2025-12-23 18:15:06
683
原创 rust match 匹配用法
本文介绍了Rust中模式匹配(match)的多种用法,包括: 基本特性:支持各种类型匹配、解构复杂数据结构、是表达式有返回值、要求穷尽所有可能情况 具体匹配方式: 整数匹配:支持区间和通配符(_) 字符切片匹配 枚举匹配:包括自定义枚举和Option/Result标准枚举 结构匹配:解构元组和结构体 守卫匹配:在模式中添加if条件 引用匹配:处理String类型 语法特点: 必须覆盖所有可能情况 匹配顺序影响结果 支持值绑定和解构 匹配后所有权通常保留 模式匹配是Rust中强大且安全的特性,能优雅地处理各种
2025-12-19 16:00:01
654
原创 Elasticsearch 数据类型用途
Elasticsearch数据类型主要分为核心数据类型和复合数据类型两大类。核心数据类型包括字符串(text和keyword)、数字型、日期型、布尔型、二进制型和范围型。复合数据类型涵盖数组、对象、嵌套类型、地理位置(geo_point和geo_shape)以及特定类型如IP地址、自动补全等。其中text类型用于全文检索会被分词,而keyword类型保持原样用于精确匹配;日期型支持多种格式存储;地理位置类型支持坐标点和复杂形状。此外还介绍了token_count统计分词数量等特殊用途类型。这些丰富的数据类型
2025-12-18 15:21:37
1087
原创 中兴的大明(张居正)
张居正先生一生用心做了两件大事情,一件教了两个学生,这两个学生是父子,隆庆和万历,另一件事是改革变法,这也是他最值得骄傲的事情。中国历史上出名的变法人物,有商鞅、王安石、张居正,只有商鞅先生是最成功切得以持续实施的,但是下场也是最惨的一位。张先生时任内阁首辅,死之前还被封为太师,太师虽只是一个名号,但是却是为官者的最高荣耀。(明代的政治中心为一个叫内阁机构,一般设为7位成员,这7位内阁大学生是按顺序排名的,由于老朱把宰相废了,慢慢的内阁便为政治中心)隆庆皇帝死得早,小万历...
2025-12-18 15:20:39
377
原创 中兴的大明(万历新政)
万历新政(即张居正变法)以考成法整顿吏治、强化中央集权,军事上派戚继光、李成梁镇守边防并修缮长城、与鞑靼议和,经济上推行一条鞭法清丈土地、计亩征银,同时治理黄淮水利,短期内充实了国库、巩固了国防。但改革触动了官僚、大地主阶级利益,一条鞭法虽降低征税成本,却因农民需卖粮换银缴税,遭商贩与官员双重剥削而损害底层利益,激化了多方矛盾。这场改革实为明朝的 “兴奋剂”,仅短时提振国力,因一人主导、缺乏延续性,且未能突破农耕社会生产力局限,最终无法挽救王朝颓势。张居正死后下场凄惨,1582 年其逝世也被视作明朝失去翻盘
2025-12-18 15:19:12
330
原创 sublimeText Golang插件安装
本文介绍了在Sublime Text中配置Go开发环境的简要步骤:首先通过Package Control安装插件;其次安装GoSublime插件;最后在用户设置中配置GOPATH路径为"D:\golang"。这些操作可以帮助开发者在Sublime中搭建基本的Go语言开发环境。
2025-12-18 15:13:44
164
原创 Elasticsearch Centos7的安装
本文详细介绍了ElasticSearch 6.2.4及相关组件的安装配置过程。主要内容包括:1)JDK环境配置和ElasticSearch安装,解决root用户运行问题和内存调整;2)创建专用用户运行ES服务,配置系统参数优化;3)安装Head插件管理工具,解决跨域访问问题;4)Kibana可视化平台的安装与配置;5)中文分词器IK的安装方法。文中提供了完整的命令行操作步骤和常见问题的解决方案,涉及环境变量设置、用户权限管理、端口配置等多个技术要点,为搭建完整的ElasticSearch生态体系提供了实用指
2025-12-18 15:11:25
927
原创 go.dev博客阅读-pipelines
Go语言中的高效流式数据处理 本文介绍了如何利用Go的chan类型实现高效流式数据处理,重点探讨了MapReduce模型和生产者-消费者模式的应用。通过平方计算的示例,展示了从基础管道到并行处理的演进过程: 基础实现:使用无缓冲通道构建简单管道 并行优化:引入多goroutine处理和有缓冲通道 安全改进:添加done通道实现优雅终止 性能考量:讨论GC优化和资源释放问题 文章特别强调了通道关闭、协程管理和异常处理的重要性,为构建健壮的流式处理系统提供了实用建议。
2025-12-18 14:58:50
895
原创 Go语言项目开发,常用的几种设计模式
本文介绍了Go语言中常用的几种设计模式及其实现方式。创建型模式包括单例模式(使用sync.Once保证线程安全)和工厂模式(通过函数返回接口);结构型模式涵盖装饰器模式(动态添加功能)和适配器模式(接口转换);行为型模式包含策略模式(算法封装替换)和选项模式(优雅参数设置)。每种模式都通过典型代码示例展示了Go语言中的实现特点,如接口组合、闭包函数等特性,体现了Go语言简洁高效的设计哲学。这些模式为构建灵活、可维护的Go程序提供了有效解决方案。
2025-12-15 17:01:58
730
原创 设计模式-控制反转【golang】
本文通过Go语言示例解释了控制反转(IoC)设计模式。文章展示了传统方式下业务逻辑直接依赖具体数据库实现的问题,当需要更换数据库时不得不修改业务代码。然后通过引入接口和回调函数,将依赖管理从业务逻辑中抽离出来,交由外部容器控制。这种实现方式采用闭包回调函数+接口的组合,通过预定义代码块在运行时回调执行,从而降低了业务代码与具体实现的耦合度,使得在不修改业务逻辑的情况下可以灵活切换依赖组件。
2025-12-12 17:46:56
268
原创 golang的包名中带有 internal 引入
Go语言中internal包是特殊的访问控制机制,仅允许其父目录及子目录下的代码导入。例如在github.com/myapp项目中,main.go可以导入同级internal包,但external/consumer.go则不行。这种设计用于隐藏内部实现细节,防止外部误用。根据Go官方文档,该机制自Go1.4引入,适用于本地和远程包,远程internal包访问限制更严格。目录层级越深,internal包的可见范围越小,形成层级访问控制。
2025-12-09 17:57:05
171
原创 Windows PowerShell编程-alias别名
摘要:本文介绍了在Windows PowerShell中创建和使用自定义函数的方法。通过编辑$PROFILE文件(路径为C:\Users\用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1),用户可以定义快捷命令。文章演示了如何创建配置文件(使用New-Item命令),并提供了两个示例函数(site和www),用于快速切换到指定目录。这种方法类似于Linux中的alias功能,能提高命令行操作效率。
2025-12-03 19:56:22
235
原创 golang sync包条件等待 sync.Cond
本文探讨了Go语言中sync.Cond的使用场景及其与互斥锁的区别。作者通过邮件发送任务的示例,对比了sync.Mutex、chan和sync.WaitGroup的实现方式,指出sync.Cond更适合多个goroutine等待条件满足的场景。sync.Cond通过Wait()挂起程序、Broadcast()/Signal()通知等待者的机制,提供了一种优雅的同步解决方案。文章最后强调sync.Cond本质上仍是基于互斥锁的封装,并指出其通知顺序不确定的特性,建议高层次的同步仍优先使用通道通信。
2025-12-03 13:37:57
360
原创 Mysql B+ 树、索引数据存储原理
B+树是一种多路平衡查找树,其特点是所有数据都存储在叶子节点,非叶子节点仅作索引。在MySQL中,InnoDB使用聚簇索引(主键索引存储数据本身),而MyISAM使用非聚簇索引(索引存储数据指针)。聚簇索引的优点包括高效主键查询和范围查询,但存在插入性能受主键顺序影响、二级索引需要回表等问题。建议使用自增整数作为主键以减少页分裂。B+树既支持从根节点搜索,也支持通过叶子节点链表顺序查询,适合数据库索引场景。
2025-12-02 11:59:05
789
原创 golang testing包基准测试
Go语言基准测试(性能测试)使用*testing.B类型,测试函数需以Benchmark为前缀。通过go test -bench命令运行测试,其中b.N由框架自动调整。示例展示了任务池的性能测试,输出包含执行时间、内存分配等指标。Windows系统需注意$转义,添加-benchmem可查看内存分配情况。测试结果包含操作系统、CPU信息、执行次数、每次操作耗时及内存分配等详细信息。
2025-12-01 14:28:02
231
原创 golang中 go race 使用
Go语言竞态检测工具使用指南 本文介绍了Go语言中处理多线程/协程安全问题的方法,重点讲解了-race参数的使用。文章首先分析了常见的线程安全问题(死锁和竞争条件),然后详细介绍了Go内置的竞态检测器使用方法。通过实际代码示例展示了如何检测和修复竞争条件问题,包括: 故意编写的危险代码示例及其竞态检测报告 使用互斥锁修复后的安全版本 使用注意事项(性能影响、环境要求等) 特别提醒开发者应在测试环境中使用该工具,并避免在生产环境启用竞态检测。
2025-11-30 14:43:25
293
原创 Windows 开发中 msvc、Miscrosofe visual C++ 2015、Visual Studio Installer、Visual Studio
文章摘要:MSVC是微软C++开发工具链的统称,包含编译器、链接器等核心组件;Visual Studio是功能全面的集成开发环境,支持多种语言,MSVC是其C++开发模块;Visual Studio Installer是管理VS安装和组件的专属工具;Microsoft Visual C++ 2015包括开发组件和运行时组件包,前者用于C++开发,后者保证程序运行。这些工具共同构成了Windows平台的C++开发体系。
2025-11-17 14:05:32
948
原创 Windows 开发 rust 程序,常见的一些报错
在Windows系统开发Rust程序时,常见报错包括编译依赖失败(如windows_x86_64_msvc、quote等)、dlltool.exe缺失以及link.exe找不到等问题。这些错误通常是由于缺少MSVC编译工具链(Visual C++ Build Tools)导致。解决方法是通过Visual Studio Installer安装C++桌面开发工具集(2022版本),配置正确的编译环境。安装完成后,即可解决Rust程序在Windows下的编译依赖问题。
2025-11-17 14:03:45
1391
原创 数组、哈希表实现原理
本文比较了数组和哈希表两种数据结构的特性与实现原理。数组通过连续内存存储和索引计算实现O(1)查询,但在搜索时需要O(n)或O(log n)时间。哈希表则通过哈希函数将键映射到数组索引,实现快速查找,但存在哈希冲突问题,常用链地址法解决。两种结构各有优缺点:数组查询高效但搜索慢,哈希表查询快但可能产生冲突。理解二者的内存机制有助于在实际业务中选择合适的数据结构方案。
2025-11-10 16:34:33
701
原创 洋葱模型-中间件实现【golang】
洋葱模型中间件实现摘要 本文介绍了洋葱模型中间件的实现原理与编程实践。中间件作为业务代码的过滤层,采用洋葱模型层层包裹请求处理流程,具有先进后出的栈式特点。 文章首先阐述了洋葱模型的概念,请求像穿过洋葱表皮一样层层递进到核心业务逻辑,再反向穿出各层中间件。然后通过Go语言示例展示了单层和多层中间件的实现方式: 单层示例实现了支付业务与风控中间件,演示了中间件初始化、业务绑定和执行流程 多层示例展示了日志、参数校验和IP黑名单三个中间件包裹登录业务逻辑的完整洋葱结构 实现要点包括: 中间件通过高阶函数返回函数
2025-10-27 18:15:04
405
原创 零拷贝Zero-copy
零拷贝技术通过减少数据在内存中的冗余拷贝,提升系统性能。其核心是让内核直接处理数据传输,避免应用程序参与不必要的拷贝。主要应用于大文件传输、日志收集等数据无需二次处理的场景。在Go中,io.Copy和syscall.Mmap实现了零拷贝功能,前者适合网络传输,后者适合文件随机访问。该技术不仅存在于操作系统层面,也体现在编程语言的切片设计等思想中,能有效节省CPU和内存资源。
2025-10-24 16:21:01
949
原创 Golang规则引擎 Gengine
本文介绍了规则引擎的概念及其在电商行业中的应用,重点讲解了基于Go语言的Gengine规则引擎。文章首先通过价格计算示例说明规则引擎如何将业务逻辑从代码中抽离,实现动态配置。然后详细介绍了Gengine的使用方法,包括规则定义语法、API调用流程和实际应用场景。Gengine通过抽象语法树将规则转换为可执行代码,支持动态加载。文章最后推荐了两个功能更强大的替代库。这种技术方案特别适合需要频繁修改业务规则的场景,如电商促销和风控系统。
2025-09-16 23:07:00
699
1
原创 编程语言中的GC对比
PHP与Golang的垃圾回收机制对比 PHP采用引用计数+循环垃圾回收的组合机制,适用于短周期web请求,内存自动释放。对于CLI或大数据处理场景,可通过gc_collect_cycles()手动触发回收。其优化空间有限,主要关注大对象分配和循环引用问题。 Golang使用三色标记清除算法,通过并发执行减少STW时间。GC触发条件包括内存阈值、定时器和手动调用。优化手段包括调整GOGC参数、使用对象池、减少指针等,可显著降低GC对性能的影响。 两种语言GC机制各具特色:PHP侧重实时性,Golang强调并
2025-09-08 16:59:50
852
原创 rust 代码格式化
Rust代码格式化工具使用指南:介绍了官方工具rustfmt和cargo fmt的区别,推荐使用cargo fmt格式化整个项目,rustfmt处理单个文件。针对VSCode编辑器,提供了配置自动保存格式化的方法(需安装rust-analyzer插件并设置editor.formatOnSave)。文章通过对比不规范和规范的代码格式,强调代码格式化的重要性,并给出不同场景下的格式化解决方案。
2025-09-06 12:42:44
423
原创 位运算语法糖-文件打开函数
本文介绍了位运算在权限控制和订单状态管理中的应用。通过定义不同位掩码表示权限或状态(如读、写、已支付等),使用|运算组合权限,&运算检测权限,&^移除权限。这种方法简洁高效,常见于文件操作和状态管理场景(如订单状态),通过位运算可轻松实现多权限/状态的组合判断。
2025-09-03 23:08:44
176
原创 微信扫码开发流程图
本文介绍了微信扫码开发的完整流程,通过流程图展示了从用户扫码到系统响应的各个环节。开发过程包括生成二维码、用户扫码验证、服务器回调处理等关键步骤,适用于支付、登录等多种应用场景。该流程图直观呈现了微信开放平台接口的调用顺序和数据处理逻辑,为开发者提供了清晰的实现指引。
2025-08-22 16:04:25
132
Closure闭包函数示例
2019-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅