はじめに
Golangをもちいてapiサーバーを作成するさいに調べたことをまとめます。
Golangの基礎
ポインタについて
ポインタは変数の値ではなく、変数が格納されてるアドレスをわたす。
引数やレシーバを関数内で書き換える必要がある場合や、大きな構造体や配列を扱う場合に使用するとよい。
&は、変数からそのポインタを抽出するのに使用する。
*はポインタが指し示す変数の実体を抽出する。
*はポインタ型の宣言をするときに使用する。
変数の初期値
golangでは、明示的な初期値なしで宣言された変数にはゼロ値が与えられます。
https://go.dev/tour/basics/12
https://qiita.com/tenntenn/items/c55095585af64ca28ab5
委譲 embedded
GOでは継承は使えない
nilって何
Goでは、nilはポインター、インターフェイス、マップ、スライス、チャネル、および関数タイプのゼロ値を表す。
nilは何らかの「未定義」状態を意味するものではなく、それ自体が値。 Goのオブジェクトは、その値がnilである場合にのみ、nil。
fmt.Println()とlog.Println()の違い
logで出力されたメッセージには、実行時間が記載されるので、より詳しいlogを残せる。
メソッドのレシーバータイプ(値 or ポインタ)について
メソッドとは、レシーバーを持つ関数のことです。
そしてレシーバーは、メソッドの定義において、メソッド名の前にパラメーターとして定義されるものです。
ポイントレシーバーのほうが汎用性高そう。
レシーバー自体を変更するならポインタレシーバー。
Goでのjson構造体の扱い方
Ginとは
Ginは、Golangのフレームワーク
urlパラメータの取得方法、bodyの取得方法
GolangのMVCモデルアプリ
MVCモのデルのAPIを作成するときに参考にした記事。
GoAPIでDTOを実装する
DTOとは
ドメイン層をインフラ層(DB)から分離したいときに使います。
例えば、以下のようなモデルが定義されているとします。
このとき、DBでstatus = "0" or "1"が管理されているとしても、DTOを使用すれば、ドメイン側ではStatus = "active" or "inactive"などに変換して取り扱うことができます。
Golangのエラーハンドリング
エラーは上流に委譲、ログに出力することが主。
エラーを含めた簡単なレスポンスの返し方
golliraを用いたルーティング
golliraは、ルーティング用のライブラリ
ルーティングでのミドルウェアを実装
gormライブラリでDB操作
gormとは、golangのorマッパー
公式リファレンスをわかりやすくまとめている記事。
公式
gormを用いたDBとの接続方法
トランザクション
ページング処理のSQLについてlimitとoffset
Golang その他