「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > なぜ「Defer」は、GOの入力パラメーターとは異なる名前の返品値に影響を与えるのですか?

なぜ「Defer」は、GOの入力パラメーターとは異なる名前の返品値に影響を与えるのですか?

2025-03-04に投稿されました
ブラウズ:649

Why Does `defer` Affect Named Return Values Differently Than Input Parameters in Go?

go

in goの変数宣言に対する延期の効果を理解すると、延期キーワードの使用により、パニックが発生したとしても、返品時に関数が実行されるようになります。ただし、関数内で異なる方法で宣言された変数に関しては、結果は変化し、混乱につながる可能性があります。 defer func(){i}() 私を返します } func main(){ fmt.println(c(0))//印刷0 }

この例では、C関数を呼び出して値0に渡します。ただし、結果を印刷すると、予想される1ではなく0を取得します。これは、関数への入力パラメーターとして宣言されるためです。 returnステートメントが実行されると、延期関数が呼び出されますが、増分は戻り値に影響を与えません。 defer func(){i}() 私を返します } func main(){ fmt.println(c1())//印刷1 }

ここで、私はC1関数の結果パラメーターとして宣言されています。 returnステートメントが実行されると、iの値は返品値に設定されます。ただし、延期関数は、返される前にiの値を変更することが許可されています。これにより、出力は1になります。 defer func(){i}() 戻る2 } func main(){ fmt.println(c2())//印刷3 }

func c(i int) int {
    defer func() { i   }()
    return i
}

func main() {
    fmt.Println(c(0)) // Prints 0
}
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3