リソースに対するDELETE
https://tutorialedge.net/golang/creating-restful-api-with-golang/#deleting-articlesにて
deleteArticle関数の中で
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関数とスライスの要素の取得方法、スライスを展開して間変調引数として渡す方法と基礎文法の良い復習となった。