Git 如何取消文件追踪

4 月 22 日
阅读 2 分钟
713
项目刚建好,代码写得飞快,一连串 git add .、git commit、git push。 推送完成后打开远程仓库,却发现一堆不应该提交的文件也跟着进去了: 编译产物、依赖目录、本地配置文件……

Go语言面向对象特性之--多态与继承的实现机制

2025-11-14
阅读 4 分钟
1.5k
面向对象编程的核心范式围绕封装、继承与多态展开。传统语言(如Java、C++)通过类与继承体系实现这一目标:类定义数据结构与方法,继承建立类型层级,多态通过父类引用指向子类实例实现。Go语言在设计初期即明确拒绝传统类继承模型,其官方文档指出:“Go不是传统意义上的面向对象语言,但它支持面向对象的核心思想。”

WebSocket vs gRPC Stream:深度对比两种流式通信技术

2025-10-28
阅读 3 分钟
2.5k
在实时通信与流式数据传输领域,WebSocket与gRPC Stream是最常被提及的两项技术。本文将从协议设计、通信模型、适用场景等维度展开深度对比,帮助开发者理解两者的本质差异与选择逻辑。

断言与反射--Golang

2025-09-25
阅读 5 分钟
1.5k
在 Go 语言中,类型断言(Type Assertion) 和 反射(Reflection) 是两种处理动态类型的核心机制,分别用于不同场景下的类型操作。前者是静态类型系统在运行时的补充,后者则提供了更底层的动态类型检查和操作能力。

标签(Label)的使用--Golang

2025-09-23
阅读 3 分钟
2.8k
在 Go 语言中,标签(Label) 是一种用于控制流语句(如 break、continue、goto)的目标定位机制。它允许你显式指定代码执行的跳转位置,尤其在处理嵌套循环、多层条件分支或需要精确控制程序流时非常有用。以下从语法、作用域、使用场景、注意事项等方面详细说明。

当接口实例被当作参数传递的时候,传递的是什么?- Golang

2025-08-17
阅读 4 分钟
2.8k
在 Go 语言中,接口变量本身是值类型(Value Type),而非引用类型(Reference Type)。因此,当接口类型(包括空接口 interface{} 和非空接口)被作为参数传递时,传递的本质是 接口变量的副本,其底层结构根据接口类型的不同分为 eface(空接口)或 iface(非空接口)。(详见 interface 的源码分析)

Go 堆与栈内存:从底层机制到性能优化

2025-08-12
阅读 4 分钟
2.6k
在开发中,我们每天都在与内存打交道——声明变量、创建结构体、操作切片与映射。但是否真正理解:变量何时分配在栈?何时逃逸到堆?Go 的栈如何动态扩展?堆内存又如何被 GC 高效回收?这些问题,可以通过 go build -gcflags="-m" 输出的逃逸分析日志得到答案。

Goroutine 的创建与调度:从 GPM 模型到 go 关键字的底层逻辑

2025-08-11
阅读 4 分钟
1.6k
在理解 Goroutine 之前,我们先回顾一下的传统并发模型。在多数编程语言(如 Java、C++)中,并发主要依赖「线程」(Thread)实现。但线程存在两个问题:

interface 的源码实现(iface 与 eface)- Golang

2025-08-06
阅读 5 分钟
1.9k
要深入理解 Go 接口的底层实现,必须从 接口的底层数据结构(iface 和 eface)、动态类型与值的存储方式,以及 运行时如何通过这些结构实现方法调用 三个层面入手。以下是结合 Go 源码(以 1.21 版本为例)的详细解析。

select 的基本使用及其特性-Golang

2025-08-05
阅读 3 分钟
2.1k
在 Go 语言中,select 语句是专门用于监听多个 Channel 操作的控制结构,其核心作用是协调多个 Channel 的读写事件,确保程序能高效响应任意一个 Channel 的就绪状态。多与 for 循环配合使用,进行监听。以下是其详细用法和常见场景:

Channel 的源码分析与高效使用-Golang 🔥

2025-07-27
阅读 18 分钟
11.9k
“不要通过共享内存来通信,而要通过通信来共享内存”。这句话精准概括了 Go 并发模型的核心哲学——而承载这一哲学的核心原语,正是 channel(通道)。

[]A 与 []*A 的内存分配、生命周期-Golang 🔥

2025-07-26
阅读 2 分钟
1.4k
一、内存分配无论 []A 还是 []*A,切片本身的元数据(切片头)结构是完全相同的。切片头是一个包含 3 个字段的结构体:ptr:指向底层数组的指针(8 字节)。len:切片长度(8 字节)。cap:切片容量(8 字节)。因此,切片头本身占用的内存大小 24 字节,内存完全一致。切片的核心是底层数组,内存分配的核心差异源于底...

unsafe.Pointer 与 uintptr-Golang

2025-07-25
阅读 3 分钟
1.6k
unsafe 包提供了绕过类型系统的底层内存操作能力,用于实现高性能、跨语言交互或底层数据结构。其中最核心的类型是 unsafe.Pointer 和 uintptr。

Map 的源码分析、内存分配、扩容机制-Golang 🔥

2025-07-25
阅读 8 分钟
2.1k
Go 语言的 map 是内置的键值对(Key-Value)集合类型,是基于哈希表实现的高效数据结构,用于高效存储和查找数据。其核心特性如下:

数组与切片的源码分析与高效使用-Golang 🔥

2025-06-30
阅读 5 分钟
2k
在 Go 语言中,数组(array)和切片(slice)是两种不同的数据结构,它们在内存分配机制上存在着显著差异。深入理解这些差异及原理并恰当使用,能够帮助我们提高代码的执行效率。

Influxdb3 查询的优化及踩坑记录

2025-06-26
阅读 3 分钟
2.7k
一开始,我采用的查询语句比较简单,仅指定查询时间起点,这在初期并没有出现问题。但是随着写入 measurement 的数据量累积变大后,遇到了查询错误。查询语句及报错信息如下:

InfluxDB 3 Core 的安装与基本使用

2025-06-21
阅读 5 分钟
5.6k
安装命令此命令仅适用于 Linux 和 macOS ,我是在 Ubuntu 系统安装的。安装完成后 influxdb3 会立即启动。 {代码...}

Solana 交易加速之 SetComputeUnitPrice

2025-01-07
阅读 2 分钟
2.3k
SetComputeUnitPrice 是 Solana 区块链中的一条指令,用于设置计算单元价格(Compute Unit Price)。它对链上程序(智能合约或程序)的执行成本和性能有重要影响。

Rust 和 Go 在多线程的对比

2024-09-20
阅读 2 分钟
1.7k
轻量性:内存占用:每个 goroutine 的栈内存只有 2KB 左右,远小于传统线程的栈大小(一般为几 MB)。这使得你可以轻松地创建成千上万的 goroutines,而不会造成明显的内存压力。