Golang 中 new 与 make 的区别及适用场景

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

Golang 中 new 与 make 的区别及适用场景

Go 语言实现 MCP 鉴权,你该选哪种认证方案?

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

Go 语言实现 MCP 鉴权,你该选哪种认证方案?

Go 语言中为什么不能直接对 map 元素取地址?

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

Go 语言中为什么不能直接对 map 元素取地址?

如何利用 Docker 在 Ubuntu 上打包 Golang 应用

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

如何利用 Docker 在 Ubuntu 上打包 Golang 应用

Go 里为什么 nil 接口不等于 nil?把底层结构和常见陷阱一次讲清

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

Go 里为什么 nil 接口不等于 nil?把底层结构和常见陷阱一次讲清

Go 生态里的 AI 库盘点:SDK、开源与选型指南

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

Go 生态里的 AI 库盘点:SDK、开源与选型指南

Ubuntu 下如何测试 Golang 打包应用的性能

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

Ubuntu 下如何测试 Golang 打包应用的性能

Debian 上如何交叉编译 Golang 程序

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

Debian 上如何交叉编译 Golang 程序

Debian 下 Go 语言如何进行消息队列编程

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

Debian 下 Go 语言如何进行消息队列编程