2025 年学习 Golang,你不会后悔
正如我在之前的文章中提到的,我们正在构建LiveAPI,一个超级便捷的 API 文档自动生成工具。LiveAPI 的后端使用 Golang 语言,我正在探索 Golang 的独特而酷炫的功能。
对于那些不知道的人来说,Golang(Go)是谷歌于 2009 年设计的一种编程语言。它的语法与 C 类似。
在从事 Golang 项目之前,我主要使用 Node.js 和 Python Web 框架。对于从其他领域转到 Golang 的初学者来说,一开始可能会有点困难,但一旦你练习并积累了专业知识,你就不会放弃。
我的第一个 Golang 项目是将 Python CLI 工具Glee转换为 Golang。
我们发现 Python 速度较慢,而且维护单个已编译的 CLI 二进制文件非常困难,有时该二进制文件还与 Mac OS 不兼容。这些问题以及其他问题迫使我们转向 Golang。这里有一篇 Reddit 帖子,介绍了这次迁移背后的故事和问题。
在本文中,我将解释 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
}
延迟就像为清理任务设置提醒一样。这类似于在打开文件时写一张便条,上面写着“别忘了关闭文件”。
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。
文章来源:https://dev.to/lincemathew/learn-golang-in-2025-you-wont-regret-it-531f