news 2026/2/10 14:55:39

12.12 学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12.12 学习笔记

一、Gin框架核心

1. 中间件执行顺序及c.Next()作用

核心逻辑

Gin中间件遵循洋葱模型,执行顺序由注册顺序决定,c.Next()是“前置逻辑”与“后置逻辑”的分界点:

  • 前置逻辑:按注册顺序执行(先注册先执行);
  • 后置逻辑:按注册逆序执行(后注册先执行);
  • c.Abort()会终止后续中间件/路由执行,直接进入后置逻辑。
代码示例
packagemainimport("github.com/gin-gonic/gin""fmt")funcm1()gin.HandlerFunc{returnfunc(c*gin.Context){fmt.Println("m1 前置")c.Next()fmt.Println("m1 后置")}}funcm2()gin.HandlerFunc{returnfunc(c*gin.Context){fmt.Println("m2 前置")c.Next()fmt.Println("m2 后置")}}funcmain(){r:=gin.Default()r.Use(m1(),m2())r.GET("/test",func(c*gin.Context){fmt.Println("路由执行")c.JSON(200,gin.H{"msg":"ok"})})r.Run(":8080")}

执行结果

m1 前置 → m2 前置 → 路由执行 → m2 后置 → m1 后置

二、Go性能分析

1. pprof工具使用

核心定位

内置性能分析工具,支持CPU、内存、协程、阻塞等维度分析,分两种使用方式:

使用方式适用场景核心命令
HTTP方式服务端import _ "net/http/pprof"+http.ListenAndServe(":6060", nil)
命令行方式独立程序pprof.StartCPUProfile(f)+pprof.StopCPUProfile()
常用分析命令
# CPU分析(采样10秒)go tool pprof http://localhost:6060/debug/pprof/profile?seconds=10# 内存分析go tool pprof http://localhost:6060/debug/pprof/heap# 协程分析go tool pprof http://localhost:6060/debug/pprof/goroutine

三、Go语法核心

1. defer与return的交互

返回值类型是否可修改示例结果
命名返回变量func f() (res int) { res=10; defer func(){res=20}(); return res }20
匿名返回值func f() int { res=10; defer func(){res=20}(); return res }10
指针类型func f() *int { res=10; defer func(){*&res=20}(); return &res }20

2. Channel核心(sendq/recvq)

底层结构
typehchanstruct{qcountuint// 队列元素数dataqsizuint// 缓冲区容量buf unsafe.Pointer// 缓冲区指针recvq waitq// 接收阻塞协程队列sendq waitq// 发送阻塞协程队列lock mutex// 互斥锁}
核心作用
队列触发场景设计目的
sendq无缓冲Channel无接收方/有缓冲Channel缓冲区满存储阻塞的发送协程,实现同步通信
recvq无缓冲Channel无发送方/有缓冲Channel缓冲区空存储阻塞的接收协程,保证数据有序传递
设计优势
  • 解耦发送/接收协程,无需严格同步;
  • FIFO队列保证公平性,避免协程饥饿;
  • 统一处理无缓冲/有缓冲Channel的阻塞逻辑。

3. 泛型vs Interface

维度泛型编程Interface
核心定位类型抽象(约束数据类型)行为抽象(约束方法集合)
类型确定编译期(实例化生成专用代码)运行期(通过iface/eface获取类型)
性能开销无运行时开销类型查找/断言开销
适用场景通用算法/数据结构(如通用排序)多态行为封装(如io.Reader)
代码示例
// 泛型:编译期确定类型funcSum[Tint|float64](s[]T)T{varres Tfor_,v:=ranges{res+=v}returnres}// Interface:运行期确定类型typeFormatterinterface{Format()string}funcPrint(f Formatter){fmt.Println(f.Format())// 运行时确定具体类型}

四、并发编程

1. 奇偶有序打印(Channel实现)

packagemainimport"fmt"funcmain(){max:=10odd,even:=make(chanstruct{}),make(chanstruct{})// 奇数协程gofunc(){fori:=1;i<=max;i+=2{<-odd fmt.Println(i)even<-struct{}{}}}()// 偶数协程gofunc(){fori:=2;i<=max;i+=2{<-even fmt.Println(i)ifi==max{close(odd)return}odd<-struct{}{}}}()odd<-struct{}{}// 启动流程<-even// 阻塞等待}

2. 高并发模拟方案

方案适用场景核心工具
原生协程低并发验证sync.WaitGroup
协程池高并发(10万+)ants库
工具压测HTTP接口go-wrk/hey
协程池示例
packagemainimport("fmt""sync""time""github.com/panjf2000/ants/v2")funcmain(){pool,_:=ants.NewPool(1000)// 最大并发1000deferpool.Release()varwg sync.WaitGroup wg.Add(10000)start:=time.Now()fori:=0;i<10000;i++{_=pool.Submit(func(){deferwg.Done()time.Sleep(100*time.Millisecond)})}wg.Wait()fmt.Printf("耗时:%v\n",time.Since(start))}

五、微服务架构

1. 微服务框架对比(Kratos vs Go-Zero)

维度KratosGo-Zero
定位企业级、高可扩展轻量、一站式
代码生成基于Protobufgoctl工具(API/Proto双驱动)
服务治理组件解耦、按需集成开箱即用、全量内置
通信协议优先gRPCHTTP/gRPC双支持
适用场景大规模集群、定制化中小项目、快速落地

2. CAP理论

特性定义取舍场景典型案例
C(一致性)所有节点数据实时一致CP:金融交易Redis主从同步
A(可用性)所有请求有限时间响应AP:电商展示商品库存异步同步
P(分区容错)网络分区仍可用分布式必选所有分布式系统

3. API设计与问题排查

(1)API响应慢排查流程
全局
单个
数据库
缓存
第三方
确认范围
全局/单个接口
检查服务器资源
链路追踪定位慢节点
数据库/缓存/第三方
explain分析SQL
检查命中率
设置超时降级
(2)优质API设计标准
维度核心要求
语义规范RESTful风格 + 版本控制
响应格式统一code/msg/data结构
可用性幂等性 + 限流降级
安全性鉴权 + HTTPS + 防注入
扩展性预留扩展字段 + 批量操作

4. 登录与会话管理

(1)登录流程
前端加密密码 → 后端验证 → 生成凭证(JWT/SessionID)→ 前端存储 → 后续请求校验
(2)Session/Cookie对比
维度SessionCookie
存储位置服务端(Redis/内存)客户端(磁盘/内存)
存储内容复杂对象字符串(≤4KB)
安全性高(服务端存储)低(易篡改)
有效期服务端控制客户端持久化
(3)分布式会话共享

核心方案:Redis存储SessionID-用户信息映射

1. 登录成功 → 生成SessionID → 存入Redis(设置过期)→ 写入客户端Cookie 2. 跨服务器请求 → 读取Cookie中SessionID → 从Redis获取用户信息 → 校验身份

六、容器与K8s

1. K8s Service核心

类型访问范围核心用途
ClusterIP集群内服务间通信
NodePort集群外简单外部访问
LoadBalancer集群外生产环境高可用
ExternalName集群内访问外部服务

2. 容器启动流程

(1)Docker启动
# 拉取镜像 → 创建容器 → 启动进程docker pull nginx:1.25 docker run -d -p8080:80 --name nginx nginx:1.25
(2)K8s启动Pod
提交Pod YAML
API Server验证
存入etcd
Scheduler调度
kubelet创建容器
containerd拉取镜像
runc启动容器
核心配置示例
apiVersion:v1kind:Podmetadata:name:nginx-podspec:containers:-name:nginximage:nginx:1.25ports:-containerPort:80resources:limits:cpu:0.5memory:512Mi
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 21:08:38

如何快速掌握正点原子串口调试助手:嵌入式开发的终极指南

如何快速掌握正点原子串口调试助手&#xff1a;嵌入式开发的终极指南 【免费下载链接】正点原子串口调试助手XCOMV2.6下载 正点原子串口调试助手 XCOM V2.6 下载 项目地址: https://gitcode.com/open-source-toolkit/35260 正点原子串口调试助手 XCOM V2.6 是一款专为嵌…

作者头像 李华
网站建设 2026/2/5 8:34:22

贷款 1 美元的小秘密:藏在银行柜台后的投资理财智慧

贷款 1 美元的小秘密&#xff1a;藏在银行柜台后的投资理财智慧你或许听过这个流传甚广的金融故事&#xff1a;一位拥有 50 万美元股票和债券的犹太富翁&#xff0c;走进银行却只要求贷款 1 美元。银行经理困惑不已&#xff1a;"您有这么多资产&#xff0c;为什么只借 1 美…

作者头像 李华
网站建设 2026/2/6 21:54:06

Spyder与AI结合:智能数据分析新体验

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Spyder插件&#xff0c;集成AI模型&#xff08;如Kimi-K2或DeepSeek&#xff09;&#xff0c;用于自动化数据分析和可视化。插件应支持以下功能&#xff1a;1. 自动识别数据…

作者头像 李华
网站建设 2026/2/10 12:22:59

30分钟构建Anthropic连接测试工具原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个Anthropic服务连接测试工具原型&#xff0c;功能包括&#xff1a;1. 简单的API端点输入界面&#xff1b;2. API密钥配置&#xff1b;3. 一键测试连接功能&#xff1b;4…

作者头像 李华
网站建设 2026/2/5 11:22:08

SVN小乌龟高效使用:10个让你节省1小时/天的技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个SVN小乌龟效率工具包&#xff0c;包含&#xff1a;1. 自定义快捷键配置模板&#xff1b;2. 批量操作脚本&#xff08;批量更新、提交等&#xff09;&#xff1b;3. 状态图标…

作者头像 李华