English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
スライスは可変長のシーケンスで、似たようなタイプの要素を格納します。スライスには同一のスライスに異なるタイプの要素を格納することは許可されていません。インデックス値と長さを持つ配列と同様ですが、スライスのサイズは調整可能で、配列のように固定サイズではありません。Go言語では、スライスを関数これは、関数がスライスのコピーを取得することを意味します。
スライスはスライスの容量、長さとともに値で関数に渡され、スライスのポインタは常に基本配列を指します。したがって、関数に値渡しでスライスを変更すると、関数外部に存在するスライスに変更が反映されます。この概念について例を示して説明しましょう:
//スライスを関数に渡します package main import "fmt" //スライスが存在する関数 //値渡しで func myfun(element []string) { //指定されたスライスを変更します element[2] = "Java" fmt.Println("変更スライス: ", element) } func main() { //スライスを作成します slc := []string{"C#", "Python", "C", "Perl"} fmt.Println("初期スライス: ", slc) //関数にスライスを渡します myfun(slc) fmt.Println("最終スライス:", slc) }
出力:
初期スライス: [C# Python C Perl] 変更スライス: [C# Python Java Perl] 最終スライス: [C# Python Java Perl]
使用方法:上記の例では、slcという名前のスライスがあります。このスライスはmyfun()関数に渡されます。私たちが知っているように、スライスのポインタは関数中で渡されるが、同じ参照を指しています。したがって、値C、インデックス値2Javaに変更するとき、この変更は関数外部のスライスも反映されますので、変更後の最終スライスは[c# Python Java perl]。変更スライス: Java
//関数にスライスを渡します package main import "fmt" //値渡しで func myfun(element []string) { //ここでは、スライスを変更するだけです //append関数を使用して //ここでは、この関数は //その中に存在するスライスのコピー //この関数は元のスライスを変更しません element = append(element, "Java") fmt.Println("変更スライス: ", element) } func main() { //スライスを作成します slc := []string{"C#", "Python", "C", "Perl"} fmt.Println("初期スライス: ", slc) //スライスを渡します //関数に myfun(slc) fmt.Println("最終スライス: ", slc) }
出力:
初期スライス: [C# Python C Perl] 変更スライス: [C# Python C Perl Java] 最終スライス: [C# Python C Perl]