使用 Rust 后,我写 Go 的方法都变了!

开发
今天的内容最主要跟大家分享,当使用 Rust 一段时间后回来写 Go 的有哪些变化。

大家好,我是渔夫。

今天跟大家分享,当使用 Rust 一段时间后回来写 Go 的有哪些变化。自己本身大部分工作上都是主要写 Go 的,因为项目原因,以及我自己本身对 Rust 的热爱,业余时间也喜欢写各种小工具等等,所以,也越来越习惯 Rust 的写法。

错误处理

以为我摆脱了 if err != nil { },在 Rust 中,很有可能会写出类似 let result = some_function(),然后使用 match 或 ? 操作符来处理 Result。习惯使用 Rust 的写法使用 ?, 模式匹配来处理错误情况,用起来还是有点舒服滴。

let result = some_function()?;

而 Go 呢,使用多返回值来处理错误,通常是返回一个结果和一个错误。

result, err := someFunction()
if err != nil {
    // handle error
}

Rust 错误处理还是吸引很多开发者的,很多其他语言开发者,抱怨要是错误处理像 Rust 那种多爽,Rust 的错误处理机制也吸收了其他编程语言中错误处理的优点,并结合了 Rust 独特的语言特性,如强类型系统、模式匹配和所有权模型,形成了一套高效、安全且易于使用的错误处理机制。

可以简单了解 Rust 错误处理与其他语言的不同:

  • 模式匹配与强类型系统(类似于 Haskell)
  • 无异常设计(类似于 Go)
  • 显式错误传播(类似于 C++的 RAII)
  • 可选值的处理(类似于 Swift 和 Kotlin),Rust 的 Option 类型类似于 Swift 的可选值(Optional)和 Kotlin 的可空类型(Nullable Type),用于处理可能为空的情况,这使得处理这类值更加安全和直观。

容易把 … := 打成 let … =

有时候不自觉地将 Rust 的编程习惯和风格带入 Go 的编程中,使用 let 关键字代替 := , 在 Rust 中,变量通常是使用 let 关键字来声明的。如:let x = 5。而在 Go 中,变量声明和初始化通常使用 := 符号,也很容易把错误地在 Go 中使用如 let x := 5,而正确的方式是 x := 5。

容易写循环时把 := range … 打成 in …

Rust 程序员在编写 Go 代码时,也很容易在循环结构中不自觉地将 Go 的 := range 语法写成 Rust 风格的 in。

Rust :

let numbers = vec![1, 2, 3, 4, 5];
for num in numbers {
    println!("{}", num);
}

Go :

numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
    fmt.Println(index, value)
}

函数定义关键字,容易把 func 写成 fn

习惯了 Rust 后,切到写 Go 代码时,可能会错误地使用 fn 来定义函数,也会习惯性的写错。

Rust 的写法:

fn add(a: i32, b: i32) -> i32 {
    a + b
}

Go 的写法:

func add(a int, b int) int {
    return a + b
}

函数返回类型前,习惯加 ->

在 Rust 中,函数定义时,返回类型是通过 -> 符号指定的,紧跟在参数列表后面。

总是忘记 return

习惯性在函数中漏写 return 语句,在 Rust 中,函数的最后一个表达式会自动作为函数的返回值,除非它以分号结尾。因此,在 Rust 中编写函数时,经常省略 return 关键字。

Rust 如下例子:

fn add(a: i32, b: i32) -> i32 {
    a + b  // 这个自动返回 a + b 的结果
}

Go 例子:

必须显式使用 return

func add(a int, b int) int {
    return a + b
}

习惯使用划线命名

在 Rust 开发中,标准的变量和函数命名约定是使用下划线分隔的小写字母的,即所谓的 snake_case。

Rust:

fn demo_function() {
    let local_variable = 100;
}

Go:

func DemoFunction() {
    localVariable := 100
}

注意,Go 的首字母大小写是有不同含义的。

好了,以上主要是分享当写 Rust 后,切到其他语言时,通常习惯性使用 Rust 的写法风格。当然有些没有想到的,以上的习惯性,那种是你习惯性指数比较高的呢。学习 Rust 建议初学者要适应编译告警一堆,还有跟编辑器做斗争。

责任编辑:赵宁宁 来源: 码农渔夫
相关推荐

2021-09-05 18:25:30

Go命令仓库

2024-11-08 09:19:28

2024-06-18 07:46:13

2021-01-21 14:25:44

代码开发Nature

2021-07-26 09:43:24

代码MapStructs项目

2024-03-08 10:48:10

GoRust高性能

2022-05-09 10:36:05

PythonPyScript开发者

2020-05-19 07:59:39

JavaScript语言开发

2022-05-09 15:43:34

JavaScriptRust开发

2021-05-13 18:53:34

Go编译器Uber

2021-03-10 09:54:43

RustNuShell系统

2021-08-09 14:47:34

Go语言开发

2022-01-26 20:43:04

集群构建块Chunk

2021-10-20 10:08:31

编程技能开发

2020-10-19 11:05:17

SpringTransaction事务

2021-01-05 14:44:39

比特币加密货币黄金

2020-07-07 07:00:00

RustGo语言编程语言

2023-05-23 13:59:41

RustPython程序

2022-09-16 07:40:17

CloudWeGo开源Rust

2021-02-16 11:04:26

RustGo华为
点赞
收藏

51CTO技术栈公众号