Go の[]String と...String の違い
Jay Singh
2023年1月30日
配列セクションはスライスと呼ばれます。スライスは、アレイよりも強力で柔軟性があり、便利です。
スライスはインデックス付け可能で、配列と同じように長さがあります。配列とは異なり、それらは拡張できます。
スライスは、配列の連続したセクションを定義するデータ構造であり、スライス変数とは別に保持されます。
配列はスライスと同じではありません。配列のスライスはそのサブセットです。
この記事では、Go の []string
と ...string
の違いについて説明します。
Go で []string
を使用してスライスを定義する
この例では、for
コマンドと range
コマンドを使用して、単語のセットを反復処理しました。
package main
import "fmt"
func main() {
words := []string{"Iron Man", "Thor", "Hulk", "Dr Strange", "Spiderman"}
for idx, word := range words {
fmt.Println(idx, word)
}
}
出力:
0 Iron Man
1 Thor
2 Hulk
3 Dr Strange
4 Spiderman
Go で ...string
を使用して可変個引数関数を定義する
パラメータの前の省略記号(...
)は、可変個引数関数を定義します。関数に提供されているアベンジャーズ
の名前に応答するプログラムを作成しましょう。
1つのパラメーターnames
を受け入れる sayHello
メソッドを設計しました。データ型 ...string
の前に省略記号(...
)を追加したため、引数は変数です。
Go は、関数が 0、1、または多くのパラメーターを取ることができることを理解しています。
names
パラメータは、スライスとして sayHello
メソッドに送信されます。データ型は文字列であるため、names
パラメータは文字列のスライス([]string
)のようにメソッド本体内で処理できます。
range
演算子を使用して、文字列のスライス全体を反復するループを構築できます。
package main
import "fmt"
func main() {
sayHello()
sayHello("Iron Man")
sayHello("Thor", "Hulk", "Dr Strange", "Spiderman")
}
func sayHello(names ...string) {
for _, n := range names {
fmt.Printf("Hello %s\n", n)
}
出力:
Hello Iron Man
Hello Thor
Hello Hulk
Hello Dr Strange
Hello Spiderman
Go で []string
と ...string
の両方を使用する
package main
import "fmt"
func f(args ...string) {
fmt.Println(len(args))
for i, s := range args {
fmt.Println(i, s)
}
}
func main() {
args := []string{"Hello", "Jay"}
f(args...)
}
出力:
2
0 Hello
1 Jay
関連記事 - Go Slice
- Golang のスライスから要素を削除する方法
- Golang コピー スライス
- 構造体の GoLang ソート スライス
- Go で空のスライスを作成する
- Golang でスライスが要素を含むかどうかをチェックする