发布了文章4 月 22 日
项目刚建好,代码写得飞快,一连串 git add .、git commit、git push。 推送完成后打开远程仓库,却发现一堆不应该提交的文件也跟着进去了: 编译产物、依赖目录、本地配置文件……
发布了文章2025-11-14
面向对象编程的核心范式围绕封装、继承与多态展开。传统语言(如Java、C++)通过类与继承体系实现这一目标:类定义数据结构与方法,继承建立类型层级,多态通过父类引用指向子类实例实现。Go语言在设计初期即明确拒绝传统类继承模型,其官方文档指出:“Go不是传统意...
发布了文章2025-10-28
在实时通信与流式数据传输领域,WebSocket与gRPC Stream是最常被提及的两项技术。本文将从协议设计、通信模型、适用场景等维度展开深度对比,帮助开发者理解两者的本质差异与选择逻辑。
发布了文章2025-09-25
在 Go 语言中,类型断言(Type Assertion) 和 反射(Reflection) 是两种处理动态类型的核心机制,分别用于不同场景下的类型操作。前者是静态类型系统在运行时的补充,后者则提供了更底层的动态类型检查和操作能力。
发布了文章2025-09-23
在 Go 语言中,标签(Label) 是一种用于控制流语句(如 break、continue、goto)的目标定位机制。它允许你显式指定代码执行的跳转位置,尤其在处理嵌套循环、多层条件分支或需要精确控制程序流时非常有用。以下从语法、作用域、使用场景、注意事项等方面详细说明。
发布了文章2025-08-17
在 Go 语言中,接口变量本身是值类型(Value Type),而非引用类型(Reference Type)。因此,当接口类型(包括空接口 interface{} 和非空接口)被作为参数传递时,传递的本质是 接口变量的副本,其底层结构根据接口类型的不同分为 eface(空接口)或 iface(非空接...
发布了文章2025-08-12
在开发中,我们每天都在与内存打交道——声明变量、创建结构体、操作切片与映射。但是否真正理解:变量何时分配在栈?何时逃逸到堆?Go 的栈如何动态扩展?堆内存又如何被 GC 高效回收?这些问题,可以通过 go build -gcflags="-m" 输出的逃逸分析日志得到答...
发布了文章2025-08-11
在理解 Goroutine 之前,我们先回顾一下的传统并发模型。在多数编程语言(如 Java、C++)中,并发主要依赖「线程」(Thread)实现。但线程存在两个问题:
发布了文章2025-08-06
要深入理解 Go 接口的底层实现,必须从 接口的底层数据结构(iface 和 eface)、动态类型与值的存储方式,以及 运行时如何通过这些结构实现方法调用 三个层面入手。以下是结合 Go 源码(以 1.21 版本为例)的详细解析。
发布了文章2025-08-06
要深入理解 Go 接口的底层实现,必须从 接口的底层数据结构(iface 和 eface)、动态类型与值的存储方式,以及 运行时如何通过这些结构实现方法调用 三个层面入手。以下是结合 Go 源码(以 1.21 版本为例)的详细解析。
关注了问题2025-08-06
发布了文章2025-08-05
在 Go 语言中,select 语句是专门用于监听多个 Channel 操作的控制结构,其核心作用是协调多个 Channel 的读写事件,确保程序能高效响应任意一个 Channel 的就绪状态。多与 for 循环配合使用,进行监听。以下是其详细用法和常见场景:
发布了文章2025-07-28
“不要通过共享内存来通信,而要通过通信来共享内存”。这句话精准概括了 Go 并发模型的核心哲学——而承载这一哲学的核心原语,正是 channel(通道)。
发布了文章2025-07-27
unsafe 包提供了绕过类型系统的底层内存操作能力,用于实现高性能、跨语言交互或底层数据结构。其中最核心的类型是 unsafe.Pointer 和 uintptr。
发布了文章2025-07-26
一、内存分配无论 []A 还是 []*A,切片本身的元数据(切片头)结构是完全相同的。切片头是一个包含 3 个字段的结构体:ptr:指向底层数组的指针(8 字节)。len:切片长度(8 字节)。cap:切片容量(8 字节)。因此,切片头本身占用的内存大小 24 字节,内存完全一...
发布了文章2025-07-25
Go 语言的 map 是内置的键值对(Key-Value)集合类型,是基于哈希表实现的高效数据结构,用于高效存储和查找数据。其核心特性如下:
提出了问题2025-07-25
发布了文章2025-06-30
在 Go 语言中,数组(array)和切片(slice)是两种不同的数据结构,它们在内存分配机制上存在着显著差异。深入理解这些差异及原理并恰当使用,能够帮助我们提高代码的执行效率。
发布了文章2025-06-26
一开始,我采用的查询语句比较简单,仅指定查询时间起点,这在初期并没有出现问题。但是随着写入 measurement 的数据量累积变大后,遇到了查询错误。查询语句及报错信息如下:
赞了文章2025-06-22
慢查询日志是MySQL提供的用于记录执行时间超过指定阈值的SQL语句的日志功能,是数据库性能优化的核心工具之一。大白话就是,查询语句超过一定时间没有结果返回,就会将查询语句记录到日志中。