Golang 中 new 与 make 的区别及适用场景
在 Go 里,`new` 和 `make` 都和内存分配有关,但职责并不相同。前者返回某个类型的零值指针,后者只服务于 `slice`、`map`、`channel`,并直接完成可用结构的初始化。理解这层差异,才能避免 `nil map`、空通道这类常见问题。 刚接触 Go 时, new 和 make 很容易被当成“两个都能申请内存的函数”来记忆,但一到写结构体、切片或映射时,差别马上就会暴露出来。
在 Go 里,`new` 和 `make` 都和内存分配有关,但职责并不相同。前者返回某个类型的零值指针,后者只服务于 `slice`、`map`、`channel`,并直接完成可用结构的初始化。理解这层差异,才能避免 `nil map`、空通道这类常见问题。 刚接触 Go 时, new 和 make 很容易被当成“两个都能申请内存的函数”来记忆,但一到写结构体、切片或映射时,差别马上就会暴露出来。

MCP 在生产环境里一旦接入外部工具,鉴权就不再是可选题。本文结合 Go 语言和 mcp-go v0.48.0 的现状,拆解 OAuth 2.1、自定义 Bearer Token、STDIO 环境变量三种实现思路,帮助你按传输方式、规范要求和安全边界做选型。 在 MCP 进入真实业务后,鉴权很快会从“以后再补”变成上线前必须回答的问题:谁能调用工具、调用到哪一层、不同传输方式该怎么做。

Go 的 goroutine 足够轻量,但这不等于任何场景都该无上限地 `go func()`。这篇文章把协程池的价值、争议点和实际判断标准拆开说明:什么时候直接起协程最合适,什么时候该用池控住并发、内存和系统负载。

Go 不允许直接对 map 元素取地址,这不是语法上的任性限制,而是为了避免元素在扩容、重哈希后地址变化带来的悬空指针。理解这一点后,就能更稳妥地选择“取出-修改-存回”或指针类型 map,并避开 range 遍历时的取址陷阱。

这篇文章用一套最小可行流程,演示如何在 Ubuntu 上把 Go 应用打包成 Docker 镜像并运行起来。你可以直接照着完成 Docker 安装、编写 Dockerfile、构建镜像、启动容器和结果验证,也能顺带判断哪些配置需要按项目实际情况调整。

Go 里常见的“nil 接口不等于 nil”并不是语言反常,而是接口底层表示决定的结果。关键点在于:接口值同时保存类型信息和数据指针,只有两者都为 nil,接口本身才等于 nil。理解这一点后,错误返回、类型断言和反射判断这些常见场景就更容易避坑。

本文用一篇短教程把 Go 中常见的 AES 组合讲清楚:块大小、密钥长度、填充方式、工作模式,以及 AES-ECB-PKCS7Padding 的完整加解密流程。重点保留可直接复用的 Go 代码,并说明它为何能与 Java、PHP 等语言常见实现保持兼容。

Go 方法接收者看起来只是 `T` 和 `*T` 的写法差别,实际会影响状态修改、复制成本、接口实现,甚至并发场景下的使用方式。本文把这些判断拆成几条可直接落地的规则,帮你在项目里更快选对值接收者或指针接收者。

Go 接入大模型并不缺方案,难点在于生态分散、库的定位不同。本文按云端模型、MCP、本地推理和 RAG 四类场景梳理主流 Go 库,保留各自适用边界,并给出新项目与存量项目的选型建议,方便快速判断该直接上官方 SDK,还是走兼容接口或自建链路。

在 Ubuntu 上测试 Go 打包程序,不能只看单次运行是否正常,更要分清基准测试、pprof 剖析和并发压测各自回答什么问题。本文按“环境稳定、指标采集、瓶颈定位、结果回归”的顺序整理一套可直接落地的流程。

这篇文章把 Debian 上交叉编译 Go 程序的最短路径梳理清楚:先确认 Go 环境,再进入项目目录,通过设置 GOOS 和 GOARCH 指定目标平台,最后用 go build 输出可执行文件。同时也说明了一个常见边界:纯 Go 项目通常够用,但只要依赖 C 库或其他非 Go 组件,就需要额外准备交叉编译工具链。

这篇文章用 RabbitMQ 示例梳理 Debian 下 Go 消息队列开发的最短上手路径:先做队列选型,再安装服务端与 Go 客户端库,最后通过生产者、消费者代码完成一次消息收发,并说明跑通后的验证方式与后续加固方向。
