自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(132)
  • 问答 (1)
  • 收藏
  • 关注

原创 5.Rust 向量(Vec)入门指南

vec!

2026-10-21 18:14:36 215

原创 9.3 Go 空接口与类型断言学习笔记

知识点关键概念空接口any无方法要求,任何类型都满足,可接收任意值类型断言(安全)返回(值, ok),ok 为 false 不 panic类型断言(不安全)只返回值,类型不匹配会 panic自动推断类型,比 if-else 更优雅存储混合类型切片,取出需类型断言类似 JSON 结构,键 string 值任意类型。

2026-09-08 18:39:21 224

原创 从 Redis CLIENT LIST 到 Kubernetes Pod 精准定位

适用场景:在 Redis 的中看到某个连接的addr字段显示为Kubernetes 节点 IP,需要精准定位是集群中哪个 Pod发起的连接。核心挑战:Kubernetes 网络模型中的SNAT(源地址转换)机制会隐藏真实客户端 IP,导致服务端看到的源地址是节点 IP 而非 Pod IP。解决路径→ 登录节点 →conntrack穿透 SNAT 获取真实 Pod IP →kubectl定位 Pod 名称。当 Redis 的看到的是节点 IP 时,不要用ss去节点上找端口(那是 SNAT 伪装端口),而是用。

2026-09-07 15:59:22 205

原创 9.2 Go 接口组合学习笔记

原则说明小接口每个接口只包含1-3个方法,越小越灵活组合优于继承用接口嵌入组合出复杂接口,而非定义大接口接受者用最小接口函数参数使用满足需求的最小接口,让更多类型可传入实现者实现更多类型尽量实现更多小接口,在不同场景灵活使用运行时升级通过类型断言检测类型是否满足更多接口Go 标准库ioio.Reader— 1个方法io.Writer— 1个方法io.Closer— 1个方法= Reader + Writer — 2个方法= ReadWriter + Closer — 3个方法。

2026-09-05 11:30:39 253

原创 9.1 Go Interface 基础知识学习笔记

知识点关键概念接口定义type Name interface { 方法签名 },只声明不实现隐式实现不需要implements,方法签名匹配即自动实现接口多态函数接收接口参数,不同类型表现出不同行为接口切片[]Shape可存放不同类型,统一遍历调用接口赋值同一个接口变量可动态切换底层类型接口内部存储 (类型, 值) 两部分信息,调用时根据类型选择方法。

2026-09-03 18:55:17 268

原创 8.4 Go Struct Tags 学习笔记

知识点关键概念反引号包裹的元数据,附加在字段后面JSON 序列化时重命名字段json:“-”排除字段,不出现在 JSON 中零值时省略该字段JSON 反序列化根据 tag 将 JSON 映射回结构体多种 Tag一个字段可同时有 json、validate、env、default 等多种 tag反射读取 TagsTag.Lookup在运行时读取 tag 信息。

2026-09-02 21:25:12 189

原创 8.3 Go Struct 嵌入学习笔记

知识点关键概念匿名嵌入不写字段名,Go 用类型名作为字段名,字段和方法自动提升方法提升嵌入结构体的方法可以直接在外层调用方法覆盖外层同名方法覆盖嵌入方法,可用显式调用多层嵌入嵌入链逐层提升,LuxuryCar 可调用 Engine、Car、GPS、Radio 的方法字段冲突多个嵌入有同名字段时,必须显式指定来源接口提升嵌入结构体满足的接口,外层也自动满足嵌入≠继承Car 不能赋值给 Engine 变量,组合而非 is-a 关系。

2026-09-01 18:38:59 308

原创 8.2 Go Struct 方法学习笔记

知识点关键概念方法定义func (接收者 类型) 方法名(参数) 返回值,接收者写在函数名前值接收者操作拷贝,不修改原值,适合只读方法指针接收者操作原值,可以修改,适合需要变更的方法同名方法不同类型可以有同名方法,Go 根据调用对象类型自动选择String() 方法实现 fmt.Stringer 接口,自定义打印格式接收者一致性一个类型应统一使用值接收者或指针接收者。

2026-08-31 18:12:43 189

原创 8.1 Go Struct 结构体基础

知识点关键概念定义结构体,字段大写=公开,小写=私有创建实例三种方式:指定字段名、位置参数、零值逐个赋值访问/修改字段用操作符,如嵌入结构体具名嵌入 vs 匿名嵌入(匿名嵌入有字段提升)比较字段类型都可比较时,可用==值类型赋值产生独立副本,想共享需用指针格式化输出%+v带字段名,最常用。

2026-08-30 21:27:54 254

原创 7.3 Go Map 性能

知识点关键概念预分配容量减少扩容次数,hint 不是硬限制查找性能map O(1) vs 切片 O(n),数据量大时差距明显删除不释放内存delete 后内存不缩小,需重建新 map 才能释放遍历性能O(n),与切片遍历差距不大键长度影响短键哈希更快,int 键比 string 键更高效选型指南查找/存在性用 map,有序/遍历用切片。

2026-08-29 20:54:38 329

原创 7.2 Go Map 进阶

知识点关键概念map 值为切片map[K][]V— 一个键对应多个值,nil切片append安全嵌套 map— 必须逐层初始化内层,两层 comma-ok 安全访问map 值为结构体不能直接修改字段,必须取出→修改→重新赋值;用指针可直接修改map 模拟集合map[K]bool去重,键唯一自动去重map 合并依次遍历写入新 map,后者覆盖前者(重复键由最后写入的值决定)

2026-08-28 21:16:55 211

原创 7.1 Go Map 基础

知识点关键概念Map 创建或字面量访问与零值不存在的键返回零值,用 comma-ok 区分"零值"和"不存在"nil mapvar 声明是 nil,读取返回零值,写入 panicdelete删除键,不存在不报错遍历range 顺序随机,有序遍历需先排序键计数器map[key]++零值自动为0,不需要判断键是否存在分组map[K][]V同一键的值追加到切片,nil切片append安全集合map[K]bool模拟 Set,支持交集/并集/差集缓存/记忆化。

2026-08-28 21:16:05 204

原创 6.3 Go 切片技巧学习笔记

知识点关键概念删除元素— 前半段 + 后半段拼接插入元素— 双层 append,注意底层数组副作用反转切片双指针交换i<j,Go 官方推荐写法过滤删除遍历 + 条件判断 + append 收集保留值包含检查手动遍历 + break,Go 1.21+ 用去重map[元素]bool记录已见,保持首次出现顺序。

2026-08-27 18:16:11 204

原创 6.2 Go 切片自定义排序学习笔记

import ("fmt""sort"Age intSalary int// 自定义排序:30岁以下优先,然后按薪资降序under30j {return true // i <30, j >=30 → i 排前面if!return false // i >=30, j <30 → j 排前面// 同类别(都<30或都>=30),按薪资降序})要点分类优先:先判断是否<30(布尔分组),<30的人排在前面同组内再排序:同为<30的人按薪资降序,同为>=30的人也按薪资降序。

2026-08-26 22:08:43 325

原创 6.1 Go 切片学习笔记

知识点关键概念切片创建数组切片arr[1:4]、字面量[]int{...}、nil 切片共享底层数组切片修改会影响原数组,这是切片的核心特性(也是常见 bug 来源)append 追加返回新切片,必须接住;超出容量自动扩容;nil 切片可以 append浅拷贝 vs 深拷贝[:]共享底层 vscopy()独立底层copy 函数返回复制数量 = min(len(dest), len(src))容量计算的 cap = len(array) - low重叠切片。

2026-08-25 18:25:51 204

原创 5.2 Go 数组进阶学习笔记(多维、排序、搜索)

知识点关键概念多维数组[3][3]int— “数组的数组”,len取行数和列数多维数组遍历嵌套 for/range,外层遍历行,内层遍历每行元素sort 包排序— 数组需用[:]转切片,排序修改原数组逆序排序— 三层包装线性搜索逐个比较 O(n),适用于未排序数组二分搜索O(log n),只适用于已排序数组,需验证结果最值/计数/索引收集遍历统计,append收集匹配索引。

2026-08-24 18:32:08 361

原创 5.1 Go 数组学习笔记

知识点关键概念数组声明零值初始化,[N]T{...}字面量,自动长度长度是类型的一部分[3]int和[5]int是不同类型,不能互相赋值索引访问arr[0]到arr[len-1],索引从0开始传统 for 遍历for i := 0;i++— 需要索引修改元素时使用range 遍历— v 是元素拷贝,修改 v 不影响原数组range 只取值— 忽略索引;单变量中 v 是索引统计计算求最大值用传统 for,求和用 range,求平均需 float64 类型转换。

2026-08-23 22:49:09 214

原创 4.4 Go 闭包学习笔记

知识点关键概念闭包基本概念函数 + 捕获的外部变量,外部函数返回后变量仍存活闭包状态独立每次调用工厂函数创建新变量,各闭包持有独立状态闭包捕获参数外部函数的参数被闭包捕获,生成行为不同的函数(函数工厂)返回函数类型func() int— 返回类型的函数签名捕获引用而非值闭包持有变量的引用,修改会影响同源闭包;不同工厂调用产生独立变量。

2026-08-22 21:44:14 219

原创 4.3 Go 递归函数学习笔记

知识点关键概念递归基本概念函数调用自身,必须有基例(停止条件)和递归步(向基例靠近)阶乘递归单基例:n<=1 返回 1,递归步:n * factorial(n-1)多基例递归斐波那契:两个基例 F(0)=0, F(1)=1,两个子递归之和性能陷阱朴素递归可能大量重复计算(fibonacci O(2^n)),应缓存或改用迭代递归执行顺序先操作后递归 → 递减输出;先递归后操作 → 递增输出栈溢出风险Go 无尾递归优化,深度过大应改用循环。

2026-08-21 17:28:01 214

原创 4.2 Go 可变参数函数学习笔记

知识点关键概念可变参数语法— 函数内部作为切片处理调用方式传任意数量参数(0个也行),或用slice...展开切片展开操作符把切片展开为独立参数,不带...编译报错位置限制可变参数必须是最后一个参数标准库示例fmt.Printfappend都是可变参数函数。

2026-08-20 17:36:03 201

原创 4.1 Go 函数基础学习笔记

Go 函数用func// greet 函数:无参数、无返回值")greet()要点func关键字 + 函数名 + 参数列表 + 返回类型无参数时写空括号(),无返回值时省略返回类型greet()— 直接用函数名加括号执行顺序:main 中代码按顺序执行,greet()在两行 Println 之间被调用函数定义必须在main()之前(或同级),Go 不支持函数嵌套定义(不支持在函数内定义函数,但支持匿名函数)知识点关键概念函数定义,无参数无返回值的基本形式函数参数。

2026-08-19 17:27:52 164

原创 3.10 Go select 语句学习笔记

知识点关键概念select 基本用法同时监听多个 channel,先准备好先执行,只执行一个 case无数据时立即执行 default,实现非阻塞接收/发送超时控制,返回定时 channel,超时后走该 case多 channel 同时就绪Go 随机选择一个 case,避免某个 channel 被偏好/饿死select 发送操作发送也可以用 select,随机选择发送目标。

2026-08-18 17:40:40 364

原创 3.9 Go type switch 学习笔记

知识点关键概念type switch 基本语法变量赋值写法匹配接口类型多类型合并.(type) 限制.(type)

2026-08-17 17:34:39 184

原创 3.8 Go switch 语句学习笔记

知识点关键概念基本 switch默认自动 break,不需要手动写(与 C/Java 不同)多值匹配无表达式 switchswitch {}强制继续执行下一个 case,不检查条件,必须显式写switch 初始化x。

2026-08-16 22:41:37 185

原创 3.7 Go panic 与 recover 学习笔记

知识点关键概念panic 触发panic(msg)立即中断函数,panic 后的代码不执行recover 只能在 defer 内调用,捕获 panic 值并恢复执行recover 修改返回值利用命名返回值,在 defer 中设置 panic 情况的返回值捕获运行时 panic数组越界、nil 指针等运行时错误也能被 recover 捕获嵌套 panic/recoverpanic 只被最内层 recover 捕获,外层 recover 返回 nilrecover 后继续运行。

2026-08-15 22:24:48 346

原创 3.6 Go defer 语句学习笔记

知识点关键概念defer 基本用法延迟执行到函数返回前,常用于资源清理(defer Close())defer 执行顺序多个 defer 按 LIFO(后进先出)执行,最后 defer 的最先执行defer 参数捕获参数在defer 语句执行时求值,锁定当时的值defer 在循环中所有 defer 在函数返回时集中执行,循环中慎用 defer 释放资源defer 与闭包闭包捕获变量引用,执行时读取最终值;与参数捕获(值)行为不同。

2026-08-14 17:26:57 370

原创 3.5 Go goto 与标签学习笔记

知识点关键概念goto 基本用法goto label无条件跳转到标签,跳过中间代码goto 模拟循环可以模拟循环但不推荐,应使用forgoto 重试模式goto retry回到重试点,配合条件判断控制重试次数goto 清理模式跳到资源清理代码段,是最被认可的 goto 用法标签规则标签只能在同一函数内使用,goto 不能跳过变量声明推荐替代循环用for,重试用forbreak,清理用defer,goto 应谨慎使用。

2026-08-13 18:20:45 198

原创 3.4 Go range 循环学习笔记

知识点关键概念range 切片(索引+值)同时获取索引和值range 只取值用忽略索引range 只取索引只接收索引,不是值range 字符串返回字节位置和 rune,多字节字符位置会跳跃range map(键+值)遍历顺序不确定range map 只取键/值或持续接收直到 close,必须关闭否则阻塞。

2026-08-12 17:39:45 198

原创 3.3 Go break 与 continue 学习笔记

知识点关键概念break立即退出当前层循环,适合"找到即停"场景continue跳过本次迭代剩余代码,适合"过滤"场景标签 break退出指定外层循环,适合多层嵌套标签 continue跳到外层下一次迭代,内层剩余迭代全部跳过break+continue 配合内层 break 提前退出,外层 continue 过滤结果实战应用搜索用 break,筛选用 continue,嵌套用标签 break/continue。

2026-08-11 17:31:42 325

原创 3.1 Go if 语句学习笔记

知识点关键概念基本 if条件不需要括号,必须与 if 同行if-elsetrue 走 if,false 而走 else从上到下依次判断,匹配第一个为 true 的分支if 初始化语句if init;— 变量作用域仅限 if-else 块,避免污染外层嵌套 if外层条件满足后才判断内层,层级不宜过深。

2026-08-10 17:40:23 168

原创 02 Go 变量与类型学习笔记

知识点关键概念var 声明可在函数内外使用,可指定或省略类型短变量声明只能在函数内使用,自动推断类型批量声明var ()分组声明多个变量,更整洁类型推断省略类型时编译器根据右值推断,浮点默认float64零值未赋值的变量自动获得零值:string→"", int→0, bool→false, float→0.0常量const声明不可修改,编译时确定,支持iota枚举基本类型int/float/bool/string/rune/byte,无隐式转换类型转换float64(i)

2026-08-10 17:38:08 190

原创 01 Go 基础知识学习笔记

知识点关键概念包声明是可执行程序的入口包,同一目录下文件包名必须相同单包导入引入标准库包,未使用的包会导致编译错误多包导入分组写法,Go 推荐风格main 函数是程序唯一入口,无参数无返回值最简程序:package → import → main → Println注释//单行注释,/* */多行注释,不影响执行输出函数Println自动换行加空格,Printf格式化输出需手动\n程序结构固定顺序:package → import → func格式化输出:=短变量声明,多包功能组合使用。

2026-08-10 17:37:23 218

原创 3.2 for 循环

知识点关键概念基本 for 循环for init;condition;post {}步长控制i += 2while 风格无限循环for {}break立即退出当前循环层continue跳过本次迭代剩余代码,进入下一次迭代嵌套循环外层每推一步,内层完整遍历;break 只退出当前层标签 break。

2026-08-10 17:25:01 157

原创 芋道商城部署文档,完整sql,视频资源自取

芋道源码,芋道商城,文档,视频,sql,公开,自取,免费

2025-12-03 10:25:55 760 6

原创 Sealos急速部署生产用k8s集群

sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 永久关闭,reboot生效。这来我装的是不使用docker的版本。最大的好处是提供 99 年证书,用到我跑路是足够了。使用 Sealos,可以安装一个不包含任何组件的裸 Kubernetes 集群。因为我们在oom时应该干脆的杀死应用,而不是用swap续命,引发级联故障。# 查看,我的服务器交付时就已经关了,现在有了阿里云的镜像源,速度嗖嗖快。

2024-05-08 20:23:25 1686 1

原创 ansible快速入门手册

参数功能-v详细模式,如果执行成功,输出详细结果-i指定host文件路径,默认在/etc/ansible/hosts-f,-forks=NUMNUM默认是整数5,指定fork开启同步进程的个数-m指定使用的module名称,默认command模块-a指定模块的参数-k提示输入SSH密码,而不是使用基于ssh密钥认证-sudo指定使用sudo获取root权限-K提示输入sudo密码-u指定客户端的执行用户-C测试命令执行会改变什么内容,不会真正的去执行。先了解ansible的能力,深入学习靠自己。

2024-05-07 21:28:06 1296

原创 kubebuilder(6)webhook

这篇笔记讲的是admission webhook。当某个特定的时间发生时,api server就会查询注册的webhook,并根据一些逻辑确认转发消息给某个webhook。一种是校验类的webhook,只读取信息,做校验判断,不会改变消息,称为validating类型。在k8s中,有3类webhook,admission webhook, authorization webhook 和 CRD conversion webhook.更重要的文件是生成的这个webhook文件,我们的业务代码是写在这里的。

2024-05-04 21:27:46 1366

原创 kubebuilder(5)制作镜像&部署

使用项目自带的deploy指令,这种方式是将operator部署到本地集群中,其实和make run差不多。然后,默认的这个FROM gcr.io/distroless/static:nonroot也是下不到的。所以啊,我们只要执行下这两行就可以得到我们想要的yaml文件,然后就可以随便到别的集群执行了哦。也可修改~/.kube/config来连接其他集群,但还是太麻烦。我们需要的当然是把写的operator分发到别的集群部署。如果你的部署遇到问题,可能会遇到镜像下载不下来的问题。去别的集群,部署试试。

2024-04-29 20:13:34 815

原创 kubebuilder(4)部署&测试

现在还没有我们自定义的demo crd实例,demo nameSpace下也没有任何pod。在samples目录下有一个默认的资源描述文件tutorial_v1_demo.yaml。验证通过patch修改podNum,来增减pod的数量。controller中也会看到对应的日志。我们apply一下这个demo crd。编译运行controller。controller的日志。看到3个pod都创建出来了。我们可以使用进行部署测试。将crd部署到k8s。

2024-04-25 20:40:41 1194

原创 kubebuilder(3)实现operator

在开发公司自己的paas平台,有一个需求是,用户在发版的时候,只需要在页面上填几个字段,我们在k8s中自动拉起service和deployment等资源,屏蔽k8s的底层技术对上层用户的困扰。就是对任何tutorialv1.Demo或Service、Deployment、Pod的变化,我们的Controller都会监听到,并生成事件,触发Reconcile()方法。在前面的文章我们已经了解了operator项目的基本结构。也就是我们在k8s中只要这个crd的变动,就会触发我们的Reconcile()方法。

2024-04-24 20:07:28 1057

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除