17611538698
info@21cto.com

面向 Ruby 开发者的 Go 语言学习实用指南

编程语言 0 25 10小时前
图片

导读:本文作者以Ruby开发者的身份讲解Ruby和Go的关键区别,这对于有其他语言背景的同学来说,同样有启示作用。

我喜欢 Ruby,这门语言让我乐于编写代码。但作为一名 Rails 开发者,我最终还是遇到了瓶颈。我需要处理一个 4GB 的 CSV 文件,有时可能需要构建一个能够处理 10,000 个连接的实时通知服务。

在某些情况下,Ruby 会显得运行缓慢或者占用大量内存。因此,许多 Rails 开发人员(包括 Basecamp 团队)开始使用Go (Golang) 来开发高性能的辅助服务。

如果你和我一样,是一名 Ruby 开发者,Go 语言会让你感觉截然不同。它没有任何“魔法”,还是强类型语言,而且运行速度极快。

以下,便是我编写的 Go 语言学习指南,教你如何轻松入门。

1. 大转变:魔法不再有


在 Rails 中,我们习惯了“魔法”。你输入代码User.find(1),它就能直接运行。你看不到 SQL 代码,看不到导入语句,也不用担心数据类型问题。

而Go则恰恰相反,它没有任何魔力可言。

  • 如果使用变量,则必须定义其类型。
  • 如果导入一个库却不使用它,代码根本都无法编译。
  • 一切都需要非常明确。


一开始,这会非常烦人。你会感觉自己打字太多了。但一周后,你会意识到,因为没有什么魔法,所以你可以阅读任何 Go 文件并准确了解它的功能。

2. 语法翻译之对比


我们来看两种语言编写一个简单的函数比较。

Ruby:

def greet(name)"Hello, #{name}!"end
puts greet("Zil")

Go:

package mainimport "fmt"// We must say name is a string, and the function returns a stringfunc greet (name string) string {  return "Hello, "+ name +"!"}
func main() {  fmt.Println(greet("Zil"))}

请注意 `& package main` 和 `& import`——每个 Go 文件都需要它们。另外,你还要注意花括号{}

作为一名 Ruby 程序员,你用do...end一开始可能会觉得不习惯,但你会慢慢习惯它的。

3. 处理错误(“if err != nil”循环)


在 Ruby 中,我们通常begin...rescue会处理错误。或者,我们也可以任由应用程序崩溃,然后查看日志。


在 Go 语言中,错误并非“异常”,它们只是函数返回的值。你会在每个 Go 项目中看到这种模式:

user,err:=findUser(1)if err!= nil{  // Something went wrong, handle it here  return err}// If no error, continuefmt.Println(user.Name)

每天要写 50 次这样的代码会感觉很重复,但这意味你的应用在生产环境中几乎不会崩溃,因为你在输入代码的同时,就被迫处理每一个极端情况。

4. 杀手级特性:Goroutines


这就是我学习 Go 的主要原因。

在 Ruby 中,如果你想同时处理 10 件事,你需要 Sidekiq 和 Redis。

在 Go 语言中,你可以使用Goroutine 。你只需在函数调用前加上 Goroutine 这个词,它就会立即在后台的另一个 CPU 线程上运行。

func sendEmail(email string){  // slow logic}func main(){  // This runs in the background. No Redis needed!  gosendEmail("test@example.com")  fmt.Println("Moving on...")}

它非常的轻巧。一台5 美元的廉价笔记本电脑就能运行 10 万个 goroutine。

5. 部署:单个二进制文件


对于像我这样热爱Kamal和 Docker 的人来说,Go 语言简直是部署的绝佳选择。

在构建 Go 应用时,它会被编译成一个单独的文件(二进制文件)。这个文件包含了你的代码和所有库。你无需在服务器上安装 Ruby、Bundler 或 Node。

只需要将这个文件移动到服务器并运行即可。这使得 Docker 镜像体积小巧,部署速度也极快。

结语:你应该转型吗?


我并不建议用 Go 替换 Rails 作为你的主要 Web 应用语言。Rails 在构建用户界面和 CRUD 逻辑方面仍然快得多。

相反,你应该把 Go 当作你工具箱里的一个工具。

  • 主应用程序使用 Rails。
  • 对于需要极速运行或处理海量数据的特定微服务,请使用 Go 语言。

学习 Go 语言会让你成为更有条理的开发者。它教会你思考内存、类型以及计算机的实际工作原理。

作者:场长

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信