大家好,我是漁夫。
今天跟大家分享,當使用 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 錯誤處理與其他語言的不同:
有時候不自覺地將 Rust 的編程習慣和風格帶入 Go 的編程中,使用 let 關鍵字代替 := , 在 Rust 中,變量通常是使用 let 關鍵字來聲明的。如:let x = 5。而在 Go 中,變量聲明和初始化通常使用 := 符號,也很容易把錯誤地在 Go 中使用如 let x := 5,而正確的方式是 x := 5。
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)}
習慣了 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 語句,在 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 建議初學者要適應編譯告警一堆,還有跟編輯器做斗爭。
本文鏈接:http://www.www897cc.com/showinfo-26-64498-0.html使用 Rust 后,我寫 Go 的方法都變了!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Galaxy AI 賦能影像創作 三星 Galaxy S24 系列解鎖進階體驗
下一篇: 2024 年 Vue.js 會發生什么?