次のコラム golang チュートリアル では、Golang 配列の受け渡しについて紹介します。困っている友人の役に立てば幸いです。
Golang 配列の転送の詳細な説明
今日は、Golang 配列の転送の詳細な説明を共有します。とても良い内容だと思いますので、皆さんと共有したいと思います。非常に参考になる内容です。必要な方は編集者をフォローしてご覧ください。
# # 概念の紹介
配列とスライス##配列とは、同じ一意の型のデータ項目の番号付きの固定長シーケンスです。配列長は最大2GBでバリュー型です。スライスは配列の連続したフラグメントへの参照であるため、スライスは参照型です。
値渡しと参照渡しGo 言語で関数のパラメータを渡すには、値渡しと参照渡しの 2 つの方法があります。 Go はデフォルトで値渡しを使用してパラメーターを渡します。つまり、パラメーターのコピーを渡します。関数内でコピーの値が変更されても、元の変数は影響を受けません。
参照による受け渡しは、実際には「値による受け渡し」と呼ぶことができますが、コピーはアドレスのコピーであり、このコピーを通じて、この値が指すアドレスの値を変更できます。
Go 言語では、関数を呼び出すときに、参照型 (スライス、マップ、インターフェイス、チャネル) がデフォルトで参照によって渡されます。
配列を渡すことの欠点一般に、特に配列が特に大きい場合、ポインタを渡す方がコピーを渡すよりもコストが低くなります。具体的な理由は次のとおりです。
値の転送には初期配列の完全なコピーが必要で、このコピーがスタックに置かれるため、実行時間が多くかかるため、値の転送効率が比較的低くなります。
初期配列のコピーには、追加のメモリ領域 (スタック上のメモリ) が必要です。
コンパイラは、初期配列をコピーするためのコードの一部を具体的に生成する必要があります。もっと大きい。
回避方法上で紹介したように、2 つの方法があります。1 つ目はポインターを使用する、つまり参照渡しです。2 つ目はスライスを使用します。スライスは参照です。デフォルトで参照によって渡されるタイプです。
ポインタを使用して渡すpackage main
import "fmt"
func main() {
var arr = [5]int{1, 2, 3, 4, 5}
fmt.Println(sum(&arr))
}
func sum(arr *[5]int) int {
s := 0
for i := 0; i < len(arr); i++ {
s += arr[i]
}
return s
}
package main
import "fmt"
func main() {
var arr = [5]int{1, 2, 3, 4, 5}
fmt.Println(sum(arr[:]))
}
func sum(arr []int) int {
s := 0
for i := 0; i < len(arr); i++ {
s += arr[i]
}
return s
}
以上がGolang配列転送の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。