仕事でGoを使うこととなりましたので、年明けから勉強しておりました。
一つの区切りとしてナンチャッテToDo Web APIサーバを作りましたので、GitHubで公開しておきます。
参考文献
Goは↓の本を読んでました。
他の言語と比較しながらGoの考え方やクセを細かく説明してくれるので、CやJavaの経験者であれば効率的に吸収できるかと思います。
Amazon CAPTCHA
GinはREADME、DynamoDBはAWSのドキュメントとQiita投稿で使い方を学びました。
dynamodb - Amazon Web Services - Go SDK
あえて aws-sdk-go で dynamoDB を使うときの基本操作 - Qiita
開発環境
Visual Studio Code(Windows)で構築しました。
↓の記事でコーディングからデバッグまでの一式できるようになるかと思います。
WindowsのVisual Studio CodeでGo言語の開発環境を作る - 素敵なおひげですね
構成
ユーザ登録、ログイン/ログアウト、ToDoの投稿と取得ができる簡単なWeb APIです。
Web APIフレームワークとしてGin、DBはDynamoDBを使っています。
Gin
Ginは高速さを売りとしているGoのWeb APIフレームワークです。
↓をビルド・実行するだけで、さくっとWeb APIサーバになります。
package main import "gopkg.in/gin-gonic/gin.v1" func main() { r := gin.Default() r.GET("/hello", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "Hello, World!", }) }) r.Run() }
Goはnet/httpというHTTPサーバを標準搭載していますが、GinはAPIに特化していますのでそこは作りやすいようになっています。
- 例えば、net/httpだと、リクエストbodyを文字列として読み込んでからデシリアライズ(アンマーシャル)する必要がありますが、
- Ginでは、
c.BindJSON(&request)
だけでrequestへ値が詰められます。
DynamoDB
このAPIでは2つのDynamoDBテーブルにアクセスします。
テーブル名(とリージョン)はconfig.jsonで変更できます。
テーブル名 | パーティションキー | ソートキー |
---|---|---|
todo-user-table | Id | - |
todo-todo-table | Id | UserId |
GoからのDynamoDBのアクセスには素のaws-sdk-goを使っています。 なかなかツライです。
- ソースコードを見ていただければわかるかと思いますが、DynamoDBへのCRUDでかなりの行数となっている上、ポインタとおまじないチックな手順が入り乱れています。
- 何らかのライブラリでラッピングしたくなる。
- guregu/dynamoとかなのでしょうか。
宿題
- デプロイ
- テスト
- 標準で揃っていますが、まだ手を出せてないです。
↓の本を読んで勉強します。
みんなのGo言語【現場で使える実践テクニック】 | 松木雅幸, mattn, 藤原俊一郎, 中島大一, 牧 大輔, 鈴木健太, 稲葉貴洋 |本 | 通販 | Amazon