ホームページ  >  記事  >  バックエンド開発  >  Golang関数のパラメータ受け渡しにおけるスライスとマッピングの処理

Golang関数のパラメータ受け渡しにおけるスライスとマッピングの処理

WBOY
WBOYオリジナル
2024-04-13 16:54:02722ブラウズ

Go で関数パラメータを渡すとき、スライスとマップは値の代わりに参照を渡します。関数内のスライスを変更すると、呼び出し元の関数内のスライスに影響します。関数内のマッピングの変更は、呼び出し元の関数内のマッピングにも影響します。コピーを渡す必要がある場合は、コピー機能を使用できます。複数のゴルーチンがスライスまたはマップに同時にアクセスする場合、データの競合を考慮し、アクセスを同期するためにミューテックスを使用する必要があります。

Golang関数のパラメータ受け渡しにおけるスライスとマッピングの処理

Go で渡す関数パラメータのスライスとマッピング

Go では、関数パラメータは値型または参照型にすることができます。値型はパラメーターが渡されるときにコピーされますが、参照型は参照によって渡されます。

Slice

Slice は参照型であるため、関数パラメータが渡されるときにその参照が渡されます。これは、関数内のスライス要素に加えられた変更が、それを呼び出す関数に反映されることを意味します。

例:

func modifySlice(slice []int) {
    slice[0] = 100 // 修改切片元素
}

func main() {
    slice := []int{1, 2, 3}
    modifySlice(slice) // 传递切片引用
    fmt.Println(slice) // 输出:[100 2 3]
}

Mapping

Mapping も参照型であり、その参照も関数パラメータのときに渡されます。渡されます。スライスと同様に、関数内でマップに加えられた変更は、それを呼び出す関数に反映されます。

例:

func modifyMap(m map[string]int) {
    m["key"] = 100 // 修改映射元素
}

func main() {
    m := make(map[string]int)
    m["key"] = 1
    modifyMap(m) // 传递映射引用
    fmt.Println(m["key"]) // 输出:100
}

注意事項

  • スライスまたはマップのコピーを渡す: 参照ではなく、スライスまたはマップのコピーを渡す方が適切な場合があります。 copy 関数を使用してコピーを作成できます。
  • データ競合の防止: 複数のゴルーチンが同じスライスまたはマップに同時にアクセスすると、データ競合が発生する可能性があります。これを防ぐには、ミューテックス ロック (sync.Mutex) を使用して、スライスまたはマップへのアクセスを同期します。

以上がGolang関数のパラメータ受け渡しにおけるスライスとマッピングの処理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。