Go言語において、スライスに要素を追加するメソッドに「append()」がある。
この「append()」について、あるスライスを展開して、その要素を別のスライスに追加することが簡単にできたため備忘録として残す。
スライスの要素を別のスライスに追加する方法
package main
import "fmt"
type User struct {
Name string
Age int
}
func main() {
users := []User{
{Name: "bob", Age: 10},
{Name: "alice", Age: 20},
}
otherUsers := []User{
{Name: "jorn", Age: 15},
}
otherUsers = append(otherUsers, users...)
fmt.Println(otherUsers)
// 結果:[{jorn 15} {bob 10} {alice 20}]
}
append()の第2引数に追加したいスライスを記載して、「...」をつける。
これによって、第2引数に渡したスライスが展開されて、一つ一つの要素がotherUsersスライスに追加できる
append()の第2引数について
append()の第2引数が可変長引数を受け取ることができる。
可変長引数とは、関数が異なる数の引数を受け入れることができる特殊な引数のこと。
スライスと配列における「...演算子」とは
「...演算子」は スライスと配列を展開して、その要素を個別の引数として関数に渡す ために使用される。
これにより、可変長引数関数へのスライスの要素を渡すなど、関数呼び出し時に引数リストを柔軟に扱うことができる。
サンプルコード
package main
import "fmt"
func sumIntegers(arg ...int) {
sum := 0
for _, arg := range args {
sum += arg
}
fmt.Println("Sum of argument: %d\n", sum)
}
func main() {
mySlice := []int{1, 2, 3}
sumIntegers(mySlice...)
}
まとめ
- append()の第2引数には可変長引数を渡すことができる。
- 「...演算子」はスライス・配列を展開して、一つ一つの要素を個別の引数として関数に和すことが可能