Golang 泛型:类型参数、约束与泛型方法
课程概览 · 上一篇:错误处理、并发与泛型 · 第 9 章 · 下一篇:杂项:make 与 select 类型参数与类型推断、约束与类型集、Go 1.27 泛型方法、标准库泛型工具与工程化检查清单。 第 8 章 介绍了泛型的基本语法与取舍,本篇是泛型的深入专题。 泛型解决的不是"让代码看起来更高级",而是:同一套算法需要服务多种类型时,既不复制代码,也不退回到 an...
Rust 智能指针详解
先搞清楚一件事 Rust 的"智能指针"概念和 C++ 完全是两码事。在 C++ 里,智能指针是用来擦屁股的——程序员管不好内存,标准库帮你想办法。Rust 不一样,所有权系统在编译期就解决了 99% 的内存安全问题,所谓的智能指针只是所有权规则的延伸。 记住这句话:Rust 的智能指针不是为了修复烂代码,而是为了实现特定的数据结构需求。 Box:最简单的堆分配 Box&...
Rust Containers
Rust 的标准库提供了丰富的容器类型,每个容器都有其特定的使用场景和性能特征。理解这些容器的特性对于编写高效、安全的 Rust 代码至关重要。 Vec - 动态数组 Vec<T> 是最常用的容器,类似于 C++ 的 std::vector 或 Python 的 list。它在堆上分配连续内存,支持动态扩容。 基本用法 123456789101112131415161718192...
golang 简明语法教程
本文原为单篇 Go 简明语法速查表,现已拆分为 12 章系列,便于分节阅读与检索。各章独立成篇,可通过下方目录跳转。 系列目录 入门与基础类型 - Hello World、模块系统、包导入与声明、基本数据类型 字符串、变量与常量 - String 与 []byte 的关系、变量遮蔽、iota 常量 流程控制 - if、for(唯一循环)、switch 与 fallthrough 集合类型...
Golang 入门与基础类型
课程概览 · 第 1 章 · 下一篇:字符串、变量与常量 从 Hello World 开始,了解 Go 的模块系统、包导入与声明规则,以及基本数据类型。 Hello World 与构建命令 最小可运行程序 能编译运行的 Go 程序只需三要素:package 声明、import 语句、main 函数。 1234567package mainimport "fmt"fu...
Golang 字符串、变量与常量
课程概览 · 上一篇:入门与基础类型 · 第 2 章 · 下一篇:流程控制 深入 string 与 []byte 的底层关系,掌握变量声明、遮蔽陷阱与常量用法。 string 的底层结构:一段只读的字节序列 抛弃“字符串是一串字符”的直觉:string 是一串字节,字节代表什么字符取决于解读方式。Go 源码默认按 UTF-8 解读,但 string 类型本身不强制内容是合法 UTF-8...
Golang 流程控制
课程概览 · 上一篇:字符串、变量与常量 · 第 3 章 · 下一篇:集合类型 Go 只有 for 一种循环,配合 if 和 switch 覆盖所有流程控制场景。 流程控制总览 流程控制决定代码"如何执行"。大多数语言提供 if/else、for、while、do-while、switch、foreach、try/catch 等关键字,Go 则做了激进的"...
Golang 集合类型
课程概览 · 上一篇:流程控制 · 第 4 章 · 下一篇:函数、指针与类型 数组、切片与 Map 是 Go 最常用的集合类型,结合 slices/maps 标准库高效操作。 数组:被低估的值类型 Go 的数组(array)是固定长度、同类型元素的序列。与 C 数组最根本的差异是:Go 数组是值类型。这让它很少被直接使用,却是一切切片的根基。 数组的基本语法 声明数组必须指定长度,长度...
Golang 结构体
课程概览 · 上一篇:函数、指针与类型 · 第 6 章 · 下一篇:接口 本篇聚焦 Go 结构体–从定义、方法、嵌套组合到内存布局与 JSON 序列化,拆解这套值类型面向对象体系的底层机制(接口部分见下一篇)。 Go 没有类、继承、构造函数这些传统 OOP 概念,却用结构体(struct) + 方法(method)构建出简洁强大的数据抽象体系,核心理念是组合优于继承、值语义优先。本篇从...
Golang 函数、指针与类型
课程概览 · 上一篇:集合类型 · 第 5 章 · 下一篇:结构体 函数的多返回值、闭包、defer,以及指针的取地址与解引用和自定义类型。 函数基础:声明、参数与返回值 Go 的函数支持多返回值、命名返回值、可变参数,并把函数视作一等公民(first-class citizen)。 函数声明语法 Go 函数声明的基本形式是 func 函数名(参数列表) 返回值列表 { 函数体 }: ...
Golang 错误处理、并发与泛型
课程概览 · 上一篇:接口 · 第 8 章 · 下一篇:泛型深入专题 错误处理约定、Goroutine 与 Channel 并发模型,以及泛型基础。 本篇展开 Go 的三张王牌:error 为值的错误处理、CSP 并发原语,以及 Go 1.18 泛型基础(深入专题见 第 9 章)。 错误处理:error 是值,不是异常 Java/Python/JS 用 try/catch 抛出错误、由...
Golang 接口
课程概览 · 上一篇:结构体 · 第 7 章 · 下一篇:错误处理、并发与泛型 本篇聚焦 Go 接口–隐式实现、空接口 any、类型断言、接口组合,以及最经典的 nil 接口陷阱,拆解鸭子类型与 (type, data) 二元组的底层机制。 接口是 Go 类型系统里最优雅的设计,它把「定义契约」和「实现契约」彻底解耦–任何类型只要拥有接口定义的方法,就自动满足该接口,无需 implem...
Golang 杂项:make 与 select 深度总结
课程概览 · 上一篇:泛型 · 第 10 章 · 下一篇:测试与工程实践 make 是唯一带初始化语义的内置分配函数,只服务于 slice/map/channel;select 是唯一专门做 channel 多路复用的控制结构。两者散落在系列各篇(集合类型、并发篇),这篇把它们抽出来统一讲透:make 在编译器层面被重写成了什么、三类用途的共性陷阱;select 运行时如何实现「随机公平...
Golang 测试与工程实践
课程概览 · 上一篇:杂项:make 与 select · 第 11 章 · 下一篇:杂项:embed 与资源嵌入 init 函数、单元测试规范与常用标准库速查。 测试与工程是把语言从“能写”推向“能交付”的关键。Go 立场鲜明:测试框架内置于标准库(testing),gofmt 与 go mod 内置工具链,标准库覆盖面之广使大量场景开箱即用。本篇讲解 init 的初始化语义、tes...
golang test
Go 测试基础概念 Go 的测试能力是语言原生内建的,不需要任何第三方框架。核心命令 go test 会自动发现并运行符合约定的测试代码。Go 提供四种测试类型,均通过函数名前缀区分: 单元测试(Unit Tests):函数名以 Test 开头,签名 func TestXxx(t *testing.T) 示例测试(Example Tests):函数名以 Example 开头,无参数,通过 ...
Golang GMP调度模型
Go语言(Golang)的并发能力是其核心优势之一,主要依赖于goroutine(协程)和调度器。Go的调度器采用GMP模型(G-M-P模型),这是从Go 1.1版本开始引入的成熟调度机制,能够高效地将大量goroutine映射到少量的操作系统线程上,实现高并发和多核利用。 GMP 解决的是“哪个 goroutine 在哪个线程上继续执行”;channel 解决的是“两个 goroutine...
Java 集合框架深度剖析
容器的本质是数据结构在内存中的组织方式。如果你只是机械地记住 List、Set、Map 这三个名字,那你根本不懂容器——你只是在背诵 API。这篇文章从最底层的数组讲起,一路深入到 HashMap 的扰动函数、ArrayList 的扩容源码、ConcurrentHashMap 的并发设计,把整个 Java Collections Framework(JCF)拆到骨头。 数组:被低估的基石 ...
Useful Boost Libraries
基于 boost 1.82 timer 计时器 过去老的 boost/timer.hpp 已经废弃了,目前推荐使用的是 boost/timer/timer.hpp, 主要包括下面了2个类 class detail boost::timer::cpu_timer 计时器 boost::timer::auto_cpu_timer 计时器,基于cpu_timer实现,在析构的时候...
C++ 中的 RVO 与 NRVO
什么是 RVO? RVO(Return Value Optimization,返回值优化)是 C++ 编译器的一种优化技术,通过消除不必要的临时对象拷贝来提升性能。NRVO(Named RVO)是 RVO 的变体,针对已命名的局部变量。 关键时间点: C++11 之前:RVO/NRVO 作为编译器优化选项存在 C++17:强制要求对 prvalue(纯右值)执行 RVO C++20:进一步...
C++ 类型擦除详解
类型擦除让 C++ 在运行时处理未知类型。核心:隐藏具体类型,只暴露接口。标准库如 std::function, std::any, std::variant 都依赖它。 类型擦除是什么? 定义:运行时统一处理多种类型,编译时忘掉具体类型。只剩接口。 解决痛点: 模板太静态,无法处理运行时类型(插件、网络数据)。 容器存异构类型。 API 解耦:接受任意 callable。 核心机制:动...




















