- 博客(101)
- 收藏
- 关注
原创 docker网络代理
本文介绍了在Docker官方镜像无法直接访问时的两种解决方案:使用国内加速镜像或网络代理。针对WSL环境下网络代理的设置方法,详细说明了如何配置Docker服务代理(包括创建配置文件、设置参数、重启服务及验证),并扩展说明了容器运行时的代理设置方式(全局配置和单容器配置)。最后提供了代理配置成功后的验证方法。适用于需要通过代理访问Docker镜像的WSL用户。
2025-10-27 16:51:34
370
原创 wsl使用代理网络
摘要 本文介绍了在局域网环境下配置代理的步骤:1. 在客户端设置中启用"允许来自局域网的连接";2. 通过ip route | grep default命令获取宿主机IP;3. 使用export命令将宿主机IP和客户端端口号绑定到http、https及socks5代理环境变量中。
2025-10-23 18:05:25
399
原创 go资深之路笔记(九)kafka浅析
Kafka与Go实战:分布式消息处理指南 本文介绍了Kafka作为分布式流式平台的基本概念及其在Go语言中的应用。主要内容包括: Kafka概述:Kafka不仅是消息队列,更是高吞吐量的分布式流式平台,适合大数据处理场景。 confluent-kafka-go客户端:详细讲解了生产者和消费者的核心API,包括消息创建、发送、订阅和处理机制。 实战部署:通过Docker快速搭建Kafka服务器环境,包含Zookeeper和Kafka服务配置。 代码实现: 生产者示例:演示如何配置和发送消息,支持消息重试和幂等
2025-10-17 20:15:04
474
原创 go资深之路笔记(八) 基准测试
本文介绍了Go语言基准测试的基本用法和参数配置,重点讲解了如何通过-benchmem、-benchtime等参数进行性能分析,以及如何使用b.RunParallel进行并发测试。文章还探讨了使用有缓存channel限流时可能出现的性能问题,建议结合pprof和trace工具进行深度分析。最后总结了基准测试中的常见坑点,包括计时器控制、循环次数影响和结果稳定性等问题,并推荐使用benchstat工具进行多次测试结果统计。
2025-10-16 16:36:11
820
原创 redis lua脚本(go)调用教程以及debug调试
本文介绍了Go语言调用Redis Lua脚本的两种方式:直接使用Eval函数执行脚本,以及通过NewScript和Load方法预加载脚本以提高性能。文章详细讲解了核心函数的使用方法,并提供了示例代码展示如何传递参数和获取结果。同时,作者分享了Redis Lua脚本调试的高级技巧,包括使用redis-cli的ldb模式进行断点调试,以及如何构造测试数据来验证脚本逻辑。通过实际案例演示了如何排查脚本中的逻辑错误,帮助开发者更好地理解和调试Redis Lua脚本。
2025-10-11 21:04:39
960
1
原创 go资深之路笔记(六)坑点
Go语言常见陷阱与最佳实践摘要 本文总结了Go语言开发中的八大常见陷阱及解决方案: 接口nil陷阱:接口内部由(类型,值)组成,当赋值为nil值时若带类型则接口非nil。正确做法是直接返回nil而非接口变量。 defer参数传递:defer采用"声明时求值,退出时执行"机制。值传递不受后续变量修改影响,指针传递会受影响。 切片共享问题:切片赋值共享底层数组,修改会相互影响。扩容后分离。建议使用copy或预分配足够容量。 切片map初始化:未初始化的引用类型为nil,直接操作会panic。
2025-09-26 16:48:52
1080
1
原创 go资深之路笔记(五)用系统信号实现优雅关机
本文介绍了如何在Go程序中优雅处理系统信号以实现平滑关闭。通过创建信号通道并使用signal.Notify监听SIGINT和SIGTERM信号,程序可以在收到终止信号时执行清理操作。核心代码展示了如何创建HTTP服务器并实现优雅关机:先停止接收新请求,等待现有请求完成(最多等待10秒),然后安全关闭数据库等资源连接。文章还对比了直接Ctrl+C终止程序与优雅关闭的区别,并列举了常见的可捕获和不可捕获系统信号及其对应命令。这种方法特别适合需要处理数据库连接、Redis等资源的Web服务。
2025-09-19 20:43:10
395
原创 go资深之路笔记(四)中间件(Middleware)设计模式
本文介绍了Go语言中Web框架中间件的实现原理,通过装饰器模式和责任链模式将多个中间件串联执行。核心是通过Middleware函数类型和ApplyMiddleware方法构建处理链,其中每个中间件都能在调用前后添加逻辑。文中提供了日志记录和认证两个中间件示例,日志中间件会记录请求耗时和状态码,认证中间件会检查请求头中的token。最后通过ApplyMiddleware将中间件应用到业务处理器上,形成"日志→认证→业务"的执行顺序。这种设计模式使得中间件可以灵活组合,便于扩展和维护。
2025-09-19 19:45:46
488
原创 go资深之路笔记(三) sync.WaitGroup, sync.errgroup和 sync.go-multierror
本文介绍了Go语言中三种常用的并发控制工具:sync.WaitGroup、sync.errgroup和multierror。sync.WaitGroup用于协程同步,通过Add、Done和Wait方法控制协程执行;sync.errgroup在WaitGroup基础上增加了错误传播和上下文取消功能,可控制并发数量;multierror则用于收集多个错误信息。文章详细说明了各工具的原理、使用场景和注意事项,并提供了代码示例。这些工具在并行处理、资源初始化和错误收集等场景中非常实用,能有效提升Go程序的并发处理能
2025-09-19 18:21:10
447
原创 go资深之路笔记(二) sync.Pool
Go语言中通过sync.Pool减少GC压力的原理与实践:sync.Pool通过对象复用机制避免高频创建销毁对象导致的堆内存增长,从而降低GC触发频率。适用于缓冲池等高频持续场景,使用时需注意数据重置、异常处理和大小控制(如切片过大应直接放弃回收)。典型用法如HTTP请求体的bytes.Buffer复用,配合defer确保回收,但需注意对象池仅在高频场景有效,不当使用可能适得其反。
2025-09-10 16:12:37
359
原创 go资深之路笔记(一) Context
本文摘要: Context接口解析:包含Deadline、Done、Err和Value四个核心方法,用于控制协程生命周期和传递请求域数据。 上下文创建与派生:介绍Background/TODO根上下文创建,以及WithCancel/WithDeadline/WithTimeout/WithValue四种派生方法。 取消机制原理:通过Done通道和childmap实现父子上下文取消联动,需遵循"谁创建谁取消"原则。 最佳实践:建议直接defer取消、避免滥用WithValue传递参数,强调
2025-09-10 12:54:38
271
原创 go 多版本共存【goup + alias方案】
本文介绍了如何通过goup工具快速切换Go版本。首先安装goup和go1.23.1,然后通过设置bash别名(mc)实现临时切换,仅对当前窗口有效。该别名会设置PATH、GOROOT和GOBIN环境变量,指向goup管理的当前版本目录。使用mc命令即可临时切换到go1.23.1,不影响主环境配置。通过echo命令可验证环境变量是否生效。这种方法适合需要临时使用不同Go版本的场景。
2025-08-18 19:24:24
379
原创 【git仓库搭建笔记】
本文记录了在WSL Ubuntu20环境下搭建Git仓库的完整流程:首先安装git环境,然后在Gitee平台创建远程仓库;接着在本地初始化仓库并关联远程仓库;重点介绍了如何生成SSH密钥并配置公钥以解决首次推送失败的问题。整个过程包含详细的命令行操作和界面截图指引,涵盖了从环境准备到最终推送的完整步骤,适合初学者快速搭建Git开发环境。
2025-07-19 00:07:27
211
原创 jq处理日志数据
我将加入jq这个更加权威的圈子awk在处理大批量&&简单数据的时候还是挺方便的,但是对于一些复杂的数据还是比较麻烦。特别是现在的日志一般都是json格式,所以jq的好处就不言而喻了。
2025-05-30 18:48:12
484
原创 保姆级go-grpc 代码示例
1. 初始化目录mkdir grpccd grpcmkdir client && mkdir server && mkdir proto---
2025-03-28 22:15:53
377
原创 go学习杂记
P:代表逻辑processor,P的数量决定了系统内最大可并行的G的数量(前提:系统的物理CPU核数>=P的数量)P中最有用的是其拥有的各种G对象队列、链表、一些缓存和状态。这样,一旦G进行下一次的调用函数方法,就会检查出抢占标志位为true,然后就可以将G抢占并移出运行状态,放入 P的本地运行队列中,(或者全局队列)同时,相同的代码风格让以往困扰开发者的代码阅读、理解和评审工作变得容易了很多,至少Go开发者再也不会有那种因代码风格的不同而产生的陌生感。M并不保留G状态,这是G可以跨M调度的基础。
2025-01-22 19:52:06
943
原创 【go 优先队列】
go的优先队列和c++差不多,都是通过大小根堆实现。我们只需要 import 标准库里的 heap,以及实现 heap需要调用五个 接口。
2025-01-22 16:31:51
358
原创 【微软拼音输入法禁用 ctrl+shift+F】
设置->时间与日期-》(左侧)语言-》首选语言-》中文(简体,中国)下面的选项-》键盘-》ps:有时候不显示输入法按钮,真的找半天找不到,设计的很鸡肋,,,,微软键盘下面的选项-》按键-》拉到最下面。
2024-08-27 20:07:00
479
原创 pthread_exit() 和 pthread_join()
主线程 这里通过了 void *args;获取值( *args =retval)在线程结束时 pthread_exit(retval);,相当于 return retval;主线程可以通过 args 来访问 子线程 的堆数据。
2022-11-14 16:13:46
451
原创 memcpy源代码实现
memcpy 的原理就是将 __src指针指向的数据一个字节一个字节的赋值给 __dest。,不管多复杂的数据结构存储的数据都是字节的倍数。
2022-10-27 20:44:29
2306
原创 安装protobuf(cpp版)
注:访问外网会慢,用迅雷下载再传到你的服务器也是不错的方法。将proto文件编译成 cpp文件。有打印目录就是安装成功了。test.proto文件。
2022-10-24 14:31:58
916
原创 版本不兼容导致的undefined reference to `google::protobuf::xxx const‘
解决方法:(以下链接都是我之前写的文章)一、卸载遗留文件,完全卸载protobuf二、安装高版本的protobuf 安装protobuf(cpp版)注:如果非要那个版本的protobuf,那就安装一个低版本的g++,然后重新编译,但是要注意设置优先级升级g++后,设置多版本优先级
2022-10-24 11:52:12
1297
原创 真正的答案,cmake 时,/usr/bin/ld: cannot find -lpthreads问题
## **直接说答案:**1.真的不存在,重装g++/gcc2.cmake 提示问题,查看有无其他报错,没有就不用管,直接make。
2022-10-03 19:51:37
5493
原创 ubuntu换163源
sudo cp /etc/apt/source.list /etc/apt/source.listbacksudo echo >"" /etc/apt/source.list
2022-10-02 18:15:54
858
原创 rsync传大文件时,ssh会话中断,导致命令终止的问题
前言:最近换了一个云服务器,发现在传递大文件的时候,因为ssh长时间无操作自动关闭了,导致文件传递失败,所以就需要一个关闭ssh会话也不结束的环境。当窗口执行这个命令后,窗口环境会被保存,当关闭后再打开还是之前的状态。这样当执行的命令时长特别长时,就不会出现意外中断的情况了。
2022-10-01 04:20:08
1890
原创 cmake 报错:comparison object must be invocable as const
然后在configure 和make 后指定gcc 和g++.g++ 版本兼容问题,用高版本的g++编译低版本源码会报错。用系统原有的低版本g++,或者手动下载低版本g++安装。比如我用的g++11报错, 我这里要指定用g++9.g++ 和 gcc 的位置可用 which 命令查找。具体原因c17 与 c11 在容器上的冲突。
2022-09-07 23:39:55
770
原创 lua语言的左对齐函数(手写)
lua的制表符还是不够强大,当某一行特别大的时候,后面就全乱套了。这语言又不像python一样有这丰富的库可以调用。没办法,手写一个吧。
2022-07-19 19:36:22
472
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅