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。