[Golang]Structの検索方法メモ

こんにちは。KOUKIです。

Go言語を勉強していますが、本業で使用する機会が中々なく、時間が経つに従い、色々と忘れてしまいます^^;

そこで、勉強したことを備忘として残していきたいと思っています。

今回は、指定したIDを元にStructから特定のデータを抜き出す処理を実装しようと思います。

実装

早速、実装します。

確認しやすさを優先して、gorilla/muxを使ってAPI化しました。

解説は後回しにして、ひとまず実行してみましょう。

ローカルサーバーが起動したら「localhost:8080/1」をブラウザ上で叩いてみてください。

ID=1のデータが取得できましたね。

「localhost:8080/1」の1は、IDを指しているのです。

続いて、「localhost:8080/2」を叩いてみましょう。

OKですね。

検索プログラムの解説

実装したプログラムについて、解説していきます。

Postモデル

こちらは、StructでPostモデルを実装しました。それをスライスでpostsと定義してます。

Postに仮のデータを入れる必要があるので、createModelにてデータを作成してます。

HttpRouterの作成

routerは、gorilla/muxのrouterを宣言してます。

このrouterを使うとリクエストハンドリングを実装できます。

例えば、「router.HandleFunc(“/posts/{id}”, getPost).Methods(“GET”)」では、「localhost:8080/<post_id>」にGETメソッドでアクセスするという記述になります。

また、第二引数のgetPostにて、アクセスした先の処理を実装することが可能です。

最後に、このrouterを起動する処理を追加します。

これで、go run main.goをterminal上で打ち込むとサーバーが起動するようになります。

Structの検索(本題)

ようやく本題の処理です。

Go言語では、Struct内のデータをどのように検索すれば一番綺麗に実装できるでしょうか?

正直、やり方は色々あると思います。

私の場合は、rangeを併用して検索するのが好きです。

mux.Vars(r)では、「localhost:8080/posts/<この部分>」の”この部分”をmapで取得できるメソッドです。例えば、map[id:1]を取得できます。

取得したデータは、Stringで格納しているので、strconv.Atoiメソッドでint型にしてからid変数に格納しました。

そして、posts(スライス)はrange関数でループできるので、これによりstruct内を検索しています。

おわりに

いざ実装しようとすると、手が止まる時があります。

「あれ?どうやって実装するんだっけ?」みたいな感じになるのです。

しかし、このようにメモ程度でも書き留めておくと、後々見返せて便利ですね^^

それでは、また!

コメントを残す