正如我在之前的文章里提到的,我们正在开发LiveAPI,一个自动生成API文档的工具。LiveAPI的后端使用的是Golang,我正在发现Golang的独特和酷炫的特性,感觉很有趣。
如果你还不了解,简单来说,Golang (Go) 是由 Google 在 2009 年设计的一种编程语言。它的语法和 C 语言很相似。
在开始从事 Golang 项目之前,我主要使用 Node.js 和 Python 的 web 框架。对于转向 Golang 的初学者来说,从其他领域初期可能会有些困难,但一旦你开始练习并掌握了技能,你就不会再离开了。
我用Golang重新实现了Python命令行工具Glee,将其转换成Go语言的版本。
我们发现Python运行速度较慢,这使得维护一个单独的编译后的CLI可执行文件非常困难,有时与Mac OS不兼容,导致。这些问题以及其他挑战迫使我们转而使用Golang。这里有一个Reddit帖子详细讲述了这次转变,以及背后的原因。
本文将介绍Go语言中吸引我的独特之处。
1. Goroutines - 轻量级并发处理
func main() {
go sayHello("World") // 并发执行
time.Sleep(1 * time.Second) // 等待1秒
}
func sayHello(name string) {
fmt.Printf("Hello, %s!\n", name) // 打印问候语
}
切换到全屏模式,退出全屏模式
可以把 goroutines 想象成能够独立完成任务的小型工作者。它们比传统的线程要轻得多——你可以创建成千上万个,而不会对性能产生影响。
2. 通道功能 - 内置通讯功能
func main() {
messages := make(chan string)
go func() { messages <- "ping" }()
msg := <-messages
fmt.Println(msg)
}
代码功能解释:
func main() {
messages := make(chan string) // 创建一个字符串通道
go func() { messages <- "ping" }() // 启动一个goroutine发送"ping"消息
msg := <-messages // 从通道接收消息
fmt.Println(msg) // 打印接收到的消息
}
全屏模式, 退出全屏
通道就像水管,让goroutines可以安全地交流。想象两个人通过一根管子传递纸条——一个人写好后放进去,另一个人取出来。
3. 暂缓 - 清理变简单了
func readFile() {
file, err := os.Open("test.txt")
defer file.Close() // 在函数执行完毕时自动关闭文件
}
全屏模式 退出全屏
这就像当你打开文件时写下一个小纸条说“别忘了关掉它”,就像推迟处理整理任务一样。
4. 接口实现 - 隐式契约。
type Writer interface {
Write([]byte) (int, error)
}
type 终端输出 struct{}
func (cw 终端输出) 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("除零错误")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("错误信息:", err)
return
}
fmt.Println("计算结果:", result)
}
全屏 退出全屏
多个返回值的特点使得 Go 语言中的错误处理更加自然和明确。就像购物时既拿到商品又拿到收据一样——你可以先检查是否有问题再继续。这种模式鼓励程序员妥善处理错误。
这些只是我喜欢的 Go 语言中的一些特性。还有其他的特性,比如单个可执行二进制文件、更快的性能、自动类型推断、内置的测试功能以及跨平台编译。
如果你正在为2025年制定新年的计划,不妨把Golang加入你的清单。你绝不会后悔。谢谢你的阅读!如果你想通过参与开源项目来学习Golang,可以看看这两个项目,一个是glee,另一个是Lama2。
共同学习,写下你的评论
评论加载中...
作者其他优质文章