golang関数の戻り値を渡す方法

WBOY
リリース: 2024-04-23 09:39:01
オリジナル
539 人が閲覧しました

Go 関数の戻り値は値を渡す方法を採用しています。つまり、関数内で戻り値を変更しても、呼び出し元のコードの値には影響しません。ただし、ポインタを渡すと、変数のメモリ アドレスを渡すことができるため、ポインタへの変更が呼び出し元のコードの元の変数に反映されます。この方法は、スライスなどの値のコレクションを変更する必要があるシナリオでよく使用されます。

golang関数の戻り値を渡す方法

Go 言語の関数の戻り値の転送方法

Go 言語では、関数の戻り値は通常、値の転送を使用します。方法。これは、関数内の戻り値に加えられた変更は、その関数を呼び出すコード内の値に影響を与えないことを意味します。

値の受け渡し

次の関数を考えてみましょう:

func increment(num int) {
  num = num + 1
}

func main() {
  myNum := 5
  increment(myNum)
  fmt.Println(myNum) // 输出:5
}
ログイン後にコピー

この関数では、num を変更しても、変数値ですが、関数内でのみ有効です。関数は値によって渡されるため、main 関数の myNum は 5 のままです。

参照渡し

変数への変更を関数呼び出しコードに渡す必要がある場合があります。このために、ポインターの受け渡しを使用できます。ポインタを渡すとき、実際には変数そのものではなく、変数のメモリ アドレスを渡します。

上記の例を変更してみましょう:

func increment(num *int) {
  *num = *num + 1
}

func main() {
  myNum := 5
  increment(&myNum)
  fmt.Println(myNum) // 输出:6
}
ログイン後にコピー

&myNum を渡すことで、myNum 変数のアドレスを increment# に渡します。 # # 関数。これで、ポインターに加えられた変更は、関数呼び出しコードの元の変数に反映されます。

実践的なケース

スライスを変更する必要がある関数を考えてみましょう。スライスは値のコレクションであり、通常は値によって渡されます。関数内のスライスを変更したい場合は、ポインターを使用してスライスを渡す必要があります。

func removeElement(s []int, idx int) {
  copy(s[idx:], s[idx+1:])
  s[len(s)-1] = 0
  s = s[:len(s)-1]
}

func main() {
  mySlice := []int{1, 2, 3, 4, 5}
  removeElement(&mySlice, 1)
  fmt.Println(mySlice) // 输出:[]1 3 4 5
}
ログイン後にコピー

removeElement 関数では、&mySlice ポインタを渡して元のスライスを変更します。

適切な戻り値の受け渡しメソッドを理解して使用することで、完全に機能する効率的な Go コードを作成できます。

以上がgolang関数の戻り値を渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート