Golang 结构体、方法与接口

前言 Go 没有 class、没有继承,但通过结构体 + 方法 + 接口实现了更轻量的面向对象。核心哲学一句话:组合优于继承,隐式优于显式。 一、结构体 type Server struct { Host string // 大写开头 = 导出(公开) Port int // 小写 = 包内私有 Tags []string metadata map[string]string } // 字面量初始化(推荐: 带字段名, 可读性好且不怕字段调整) s := Server{ Host: "10.0.0.1", Port: 8080, Tags: []string{"prod", "web"}, } // 零值可用(Go 设计哲学!) var s2 Server // Host="" Port=0 Tags=nil, 直接用不会崩 s2.Port = 9090 // 结构体是值类型:赋值即拷贝 s3 := s2 s3.Port = 1000 fmt.Println(s2.Port) // 9090, 不受影响 构造函数惯例(Go 没有 constructor,用普通函数模拟): ...

2024-01-20 · 3 min · zy

Git 版本控制快速上手

前言 写代码不用 Git 等于走钢丝不系保险绳。这篇把 Git 的核心心智模型和日常高频操作整理成册,附"事故急救"章节。 一、心智模型:三个区 工作区 (Working Directory) │ git add ▼ 暂存区 (Staging / Index) │ git commit ▼ 本地仓库 (Repository) │ git push ▼ 远程仓库 (Remote: GitHub/Gitee/自建) 记住这个流向,所有命令都能推导出来。 ...

2024-01-06 · 3 min · zy

云计算虚拟化基础:KVM 与 QEMU

前言 云厂商把物理机"切"成一台台云主机卖给你,用的核心武器就是 KVM 虚拟化。理解它,就理解了 IaaS 的地基,也理解了容器的宿主环境。 一、虚拟化要解决什么 一台物理机上跑多个"完整电脑",核心需求: ...

2023-12-16 · 3 min · zy

Linux 日志管理:rsyslog 与 journald

前言 “昨晚服务为什么挂了?"——答案 90% 藏在日志里。现代 Linux 有两套并行的日志体系:传统 rsyslog(写文件)与 systemd-journald(二进制数据库)。搞懂它们,排障效率翻倍。 ...

2023-12-02 · 3 min · zy

Golang 复合类型:数组、切片与映射

前言 Go 的日常编码,八成时间在和 slice 与 map 打交道。这篇把它们的核心语义和著名"陷阱"讲透。 一、数组:定长的值类型 // 长度是类型的一部分: [3]int 和 [4]int 是不同类型! var a [3]int // {0, 0, 0}(零值) b := [3]int{1, 2, 3} c := [...]int{1, 2, 3} // 编译器数长度, 仍是 [3]int // 数组是值类型: 赋值和传参都是完整拷贝! d := b d[0] = 99 fmt.Println(b[0]) // 1 —— b 不受影响 实际开发中很少直接用数组(定长 + 值拷贝太死板),主力是切片。 ...

2023-11-18 · 3 min · zy

Linux 定时任务 cron 实战

前言 备份、日志切割、证书续期、数据同步……运维一半的自动化都靠定时任务。这篇把 cron 用法与环境陷阱一次讲清。 一、crontab 基础 crontab -e # 编辑当前用户的定时任务 crontab -l # 列出 crontab -r # 删除全部(危险! 慎用) ls /var/spool/cron/ # 各用户的任务文件 五段表达式: ...

2023-11-04 · 3 min · zy

Python 函数进阶:参数、作用域与闭包

前言 函数是 Python 的乐高积木。参数传递的几种形态、作用域查找规则、闭包——这三块搞明白,写函数式风格的代码就通了。 一、参数的四种形态 def connect(host, port=5432, *, timeout=3, **extra): print(f"{host}:{port} timeout={timeout} extra={extra}") # 1. 位置参数:按顺序传 connect("db.local") # 2. 关键字参数:指名道姓传(推荐, 可读性好) connect(host="db.local", port=5433) # 3. 仅关键字参数(* 之后的必须用关键字) connect("db.local", 5433, timeout=10) # 4. 可变参数 def add(*args, **kwargs): # args 收集多余位置参数为 tuple, kwargs 收集关键字为 dict print(args, kwargs) add(1, 2, 3, debug=True) # (1, 2, 3) {'debug': True} # 反向解包:调用时把序列/字典摊开 args = ("db.local", 5433) connect(*args) ⚠️ 默认参数的头号大坑——可变默认值: ...

2023-10-21 · 3 min · zy

Docker 安装与镜像基础操作

前言 概念懂了,开始动手装 Docker。目标:装好、跑起第一个容器、掌握镜像与容器的日常操作。 一、安装与加速 # 1. 卸载旧版本 dnf remove -y docker docker-client docker-common # 2. 配置国内 yum 源(阿里云) dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 3. 安装 dnf install -y docker-ce docker-ce-cli containerd.io # 4. 配置镜像加速器(国内拉 Docker Hub 很慢) mkdir -p /etc/docker cat > /etc/docker/daemon.json <<'EOF' { "registry-mirrors": ["https://docker.m.daocloud.io"], "log-driver": "json-file", "log-opts": {"max-size": "50m", "max-file": "3"} } EOF # 5. 启动 systemctl enable --now docker docker version # Client + Server 都有输出即成功 daemon.json 里顺手配了日志上限——容器 stdout 日志不加限制,迟早把磁盘写爆(血泪教训)。 ...

2023-10-07 · 3 min · zy

云原生入门:从虚拟机到容器

前言 这两年"云原生"(Cloud Native)铺天盖地,但很多同学只是"用着 Docker",却说不出容器到底解决了什么问题。这篇把概念的来龙去脉捋清楚。 ...

2023-09-23 · 4 min · zy

Systemd 服务管理详解

前言 现代 Linux(CentOS 7+/Debian 8+)的 1 号进程都是 systemd,服务管理早已是它的天下。systemctl 是每个运维每天都要敲的命令,这篇把常用姿势和进阶玩法一次讲透。 ...

2023-09-09 · 3 min · zy