GoもRustも例外機構(try/throw/catch)を各々の理由で敢えて持たない方針なので
エラーを返す関数は(value, error)という2つ組相当を返すところまでは両者で同じだけど

Rustは「?」オペレータを使ってメソッドチェーンも見やすく書ける
d = a.func1()?.func2()?.func3()?

Goで同じことを書くとこうなってしまう
b, err = a.func1()
if err != nil {
 return nil, err
}
c, err = b.func2()
if err != nil {
 return nil, err
}
d, err = c.func3()
if err != nil {
 return nil, err
}
これをGoで避けようとして様々な複雑化がある
データ構造を複雑化することで頑張る方法
複雑な処理をする高階関数を登場させて頑張る方法
など