Go Toolchains

Go Toolchains 从 Go 1.21 开始,Go 发行版由一个 go 命令和一个捆绑的 Go 工具链组成,工具链包括标准库以及编译器、汇编器和其他工具。 go 命令可以使用其捆绑的 Go 工具链,也可以使用它在本地 PATH 中找到或根据需要下载的其他版本,这让 go 命令本身具备了选择、

Golang byte/rune/string

byte、rune 和 string 在 Go 的源码中,byte 和 rune 都是已有类型的别名: type byte = uint8 // byte 就是 uint8 type rune = int32 // rune 就是 int32 注意:它们不是新类型。Go 定义新类型时不使用 =。

C++ 万能引用和完美转发

万能引用与完美转发 万能引用(Universal Reference) 万能引用是指形如 T&& 的引用,但它必须出现在类型推导的语境中。它的特殊之处在于,它既可以绑定到左值,也可以绑定到右值。 template<typename T> void func(T&& param); // param

MCP 和 LSP

MCP 与 LSP MCP(Model Context Protocol)与 LSP(Language Server Protocol)解决的是不同领域的问题,但两者背后的设计思想高度一致: 通过引入稳定的协议层,将多对多集成中的 M×N 耦合,解耦为 M+N 的标准化连接。 一、作用 在没有统一协

异步

异步的概念与实现机制 一、API 异步 ≠ 底层 I/O 异步 一个常见的误解:如果一个函数是"异步接口"(返回 future,或接收回调),就以为底层一定用了某种"异步 I/O"机制。 事实上,接口层面的异步语义,与底层 I/O 的实现方式是两个不同的维度。异步接口完全可以建立在阻塞 I/O 之上

C/C++ PIMPL

Pimpl (Pointer to Implementation) 原理 Pimpl 是一种将类的实现细节从头文件中分离出来的技术,通过在类中保留一个指向实现类的指针,将所有私有成员和实现细节隐藏在源文件(.cpp)中。 核心思想: Widget类 (公开接口,.h文件) │ └──

从 Unicode 到序列化

在讨论文本的存储与传输时,Unicode 和 UTF-8 经常被混为一谈。两者关注的并不是同一个问题:Unicode 定义字符及其数字编号,UTF-8 则规定这些编号如何表示为可存储、可传输的数据。 Unicode 定义字符及其码点 通常可以把 Unicode 理解为一套统一的字符集,但更准确地说,

日本麻将规则

巡 在日麻里,“巡”可以理解为牌桌上的一轮行动循环。 最直观地看,假设正常顺序是: 东家摸打 → 南家摸打 → 西家摸打 → 北家摸打 → 又回到东家 这大致就是一巡。 但对某个具体玩家来说,更实用的理解是: 从自己这次行动,到下一次又轮到自己行动,这段过程叫一巡。 例如你是南家: 你摸牌、打牌 西

golang 编译期检查接口实现

Go 中如何在编译期检查接口实现 Go 的接口是隐式实现的:一个类型只要拥有接口要求的全部方法,就自动实现了该接口。 这种设计很灵活,但也带来一个问题:代码本身没有明确声明“这个类型就是为了实现这个接口”。 场景 假设定义一个存储接口: type Store interface { Save(ke

Loading Objects

ebpf-go 提供了一个 eBPF 对象(ELF)加载器,旨在与上游的 libbpf 和 iproute2( tc / ip )项目保持兼容。ELF 文件通常是通过使用 LLVM 工具链( clang )编译 eBPF C 程序获得的。 本文描述了从已编译的 eBPF ELF 到内核中资源的整个过