LoginSignup
1
0

More than 3 years have passed since last update.

golang appendを使ってスライスから特定の要素を削除

Posted at

リソースに対するDELETE

https://tutorialedge.net/golang/creating-restful-api-with-golang/#deleting-articlesにて
deleteArticle関数の中で

main.go
Articles = append(Articles[:index], Articles[index+1:]... )

これ、『スライスの要素を削除しているのだろう。』と推測するのは容易だがどう動いているのか気になったため調べてみた。

このとき、Articlesは以下のJSONを返す。

[
{"Id":"1","Title":"Hello","desc":"Article Description","content":"Article Content"},
{"Id":"2","Title":"Hello 2","desc":"Article Description","content":"Article Content"},
{"Id":"3","Title":"Hello 3","desc":"Article Description","content":"Article Content"},
]

append関数

そもそも、appendは第一引数に要素の追加元のスライス、第二引数以降に可変長引数で末尾に追加する要素をとる関数だった。

第一引数

第一引数を見てみると、Articles[:index]。indexが2のときを出力する

fmt.Printf("%+v", Article[:index])
>> [{Id:1 Title:Hello Desc:Article Description Content:Article Content} {Id:2 Title:Hello 2 Desc:Article Description Content:Article Content}]

indexを含まない直前の要素までがすべて含まれている。

第二引数

Articles[index+1:]...は何のなのか。
同様に出力するが、indexを0とする。

fmt.Printf("%+v", Articles[index+1:])
>> [{Id:2 Title:Hello 2 Desc:Article Description Content:Article Content} {Id:3 Title:Hello 3 Desc:Article Description Content:Article Content}]

index+1を含む以降の要素を取得している。つづくは"..."はスライスを展開して可変長引数としてappendに渡している。

ということは!!!

Articles = append(Articles[:index], Articles[index+1:]... )

この記述で、特定要素の前後をくっつけることで削除し、Articlesに再代入しているということがわかる。
一行のコードだがappend関数とスライスの要素の取得方法、スライスを展開して間変調引数として渡す方法と基礎文法の良い復習となった。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0