1. K8s 网络基础模型 K8s 的网络模型有三个基本要求: 所有 Pod 之间可以不经 NAT 直接通信(跨节点也可以) 所有 Node 可以与所有 Pod 直接通信(不经 NAT) Pod 自己看到的
1. 存储概览 K8s 存储架构: 应用 (Pod) ↓ volumeMounts Volume(挂载点) ↓ PersistentVolumeClaim(存储申请) ↓ StorageClass(动
1. 为什么要分离配置 十二因素应用(12-Factor App)的第三条:在环境中存储配置。 # 不好的做法:配置写死在代码或镜像里 const dbDSN = "mysql://user:password@prod-db:3306/myapp" # 好的做法
1. K8s 安全概览 K8s 的安全模型分为四层(4C 安全模型): Cloud(云/数据中心) └── Cluster(K8s 集群) └── Container(容器
1. Helm 是什么 Helm 是 K8s 的包管理器,类比: Linux 的 apt/yum Node.js 的 npm Go 的 go mod 解决的问题: 没有 Helm 时,部署一个有多个组件的应用(Deployment + Service + Ingress + ConfigMap + HPA +
1. 项目概述 1.1 项目:Go Todo API 服务 一个简单的 RESTful API 服务,包含: HTTP API(Todo CRUD) MySQL 数据库 Redis 缓存 Prometheus 监控指标 结构化日志 优雅关闭 1.2 技术栈 语言:
Go 错误处理的演进:从痛点到优雅实践 前言 错误处理是 Go 语言开发中绕不开的话题。与其他语言的异常机制不同,Go 选择了显式错误返回的设计哲学。虽然这
1. Go 语言简介 1.1 诞生背景 Go(又称 Golang)诞生于 Google,2007 年由三位大神级工程师发起: Rob Pike:UTF-8 编码的共同设计者、
1. Go 编译流程总览 Go 是一门静态编译型语言:源码在构建阶段被直接翻译为目标平台的机器码,最终产出一个不依赖运行时解释器的可执行文件。理解这条流水
1. 变量声明 Go 是静态强类型语言,每个变量在编译期都有确定的类型。但 Go 又通过类型推断、短声明等语法糖大幅减少了冗余,写起来接近动态语言。本章把变
Go 的基本数据类型看似简单,却藏着大量容易踩坑的细节:int 到底几字节?为什么 0.1 + 0.2 != 0.3?byte 和 rune 有什么区别?哪些类型能用 == 直接比较?本章把这些问题一次讲透。
数组(array)和切片(slice)是 Go 中最基础也最容易踩坑的两个数据结构。数组是值类型,赋值即拷贝;切片是对底层数组的一个"视
map 是 Go 中最常用的引用类型之一,底层是一张哈希表(hash table)。它读写平均 O(1),但也隐藏着扩容、无序遍历、并发崩溃等诸多"
字符串是几乎所有程序都绕不开的类型。很多人只把它当作"一串字符"来用,但在 Go 里,string 的底层结构、不可变性、UTF
流程控制与函数是 Go 程序的骨架。Go 在语法上做了大量减法:只有一种循环关键字 for,if/switch 不需要括号,switch 默认不穿透。而在
1. defer 基础 defer 是 Go 的关键字,用于注册一个「延迟调用」:被 defer 修饰的函数不会立即执行,而是等到外层函数即将返回时才执行。它是 Go 处理资源释放、异常恢复
1. 指针基础 指针(pointer)保存的是变量的内存地址。理解指针是理解 Go 值传递、内存逃逸、方法集的前提。 1.1 取地址 & 与解引用 * package main import "fmt" func main() { x
结构体(struct)是 Go 中最重要的复合数据类型,它把一组不同类型的字段聚合成一个整体,是构建业务模型、数据结构乃至整个类型系统的基石。Go
接口(interface)是 Go 面向对象与多态的基石,也是「组合优于继承」哲学的直接体现。它没有 Java 的 implements 关键字,而是靠隐式实现把类型和契约解耦。
1. error 接口 Go 没有 try/catch/finally 这类异常机制,而是把错误当作普通的返回值来处理。函数把错误作为最后一个返回值交给调用方,调用方显式判断并处理。这是 Go 错误处理