2025 年学习 Golang,你不会后悔
正如我在之前的文章中所解释的那样,我们正在致力于构建 LiveAPI,这是一个超级方便的自动 API 文档生成工具。LiveAPI 的后端是 Golang,我正在探索 Golang 的独特而酷炫的功能。
对于那些不知道的人来说,Golang(Go)是 Google 于 2009 年设计的一种编程语言。它的语法与 C 类似。
在从事 Golang 项目之前,我主要使用 Node.js 和 Python Web 框架。对于从其他领域转向 Golang 的初学者来说,最初可能会有点困难,但一旦你练习并掌握了专业知识,你就不会放弃。
我的第一个 Golang 项目是将 Python CLI 工具 Glee 转换为 Golang。

我们发现 Python 速度较慢,维护单个编译的 CLI 二进制文件非常困难,该二进制文件有时与 Mac OS 不兼容。这些问题和其他问题迫使我们改用 Golang。这里有一篇 Reddit 帖子,介绍了改用 Golang 背后的故事和问题。
在本文中,我将解释 Golang 中吸引我的独特功能。
**1. Goroutines - 轻量级并发**
func main() { go sayHello("World") // runs concurrently time.Sleep(1 * time.Second) } func sayHello(name string) { fmt.Printf("Hello, %s!\n", name) }
可以将 goroutine 视为可以独立执行任务的微型工作程序。它们比传统线程轻量级得多 - 您可以创建数千个 goroutine,而不会影响性能。

**2. 频道 - 内置通信**
func main() { messages := make(chan string) go func() { messages <- "ping" }() msg := <-messages fmt.Println(msg) }
通道就像管道,可以让 goroutine 安全地通信。想象一下两个人通过管道传递纸条 - 一个人写下并放进去,另一个人拿出来。
**3. Defer - 清理变得简单**
func readFile() { file, err := os.Open("test.txt") defer file.Close() // Will run when function exits }
Defer 就像是为清理任务设置提醒。这类似于在打开文件时写一张便条,上面写着“别忘了关闭文件”。
**4. 接口实现 - 隐式契约**
type Writer interface { Write([]byte) (int, error) } type ConsoleWriter struct{} func (cw ConsoleWriter) Write(data []byte) (int, error) { return fmt.Println(string(data)) }
Go 的接口是隐式满足的 - 如果类型具有正确的方法,它会自动实现接口。这就像加入俱乐部:您无需正式声明会员资格;如果您能满足俱乐部的要求,您就会自动加入。
**5. 多个返回值 - 本机错误处理**
func divide(a, b float64) (float64, error) { if b == 0 { return 0, errors.New("cannot divide by zero") } return a / b, nil } func main() { result, err := divide(10, 0) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Result:", result) }
多个返回值使 Go 中的错误处理变得自然而明确。这就像购物时同时收到包裹和收据 - 您可以在继续之前检查一切是否正常。这种模式鼓励开发人员正确处理错误。
这些只是我喜欢 Go 的几个功能。还有其他功能,例如单个可执行二进制文件、更快的性能、类型推断、内置测试支持和交叉编译。
如果您正在制定 2025 年的计划,请将 Golang 添加到您的列表中。您不会后悔的。谢谢阅读!如果您想通过为开源项目做贡献来学习 Golang,请查看 glee 和 Lama2。