try

Go Todo練習 day2

前回の続きということでday2です TODOにUpdate, Deleteを追加 Packageを分ける CRUDなTODOになったと思います。 作成したコードはsourjp/go-practice/day2にあります。 構成 少ない内容であればMVCで分ける方がわかりやすいですね。 $ tree . ├── Makefile ├── controllers │ ├── router.go │ └── todo.go ├── go.mod ├── go.sum ├── main.go ├── models │ ├── db.go │ └── todo.go └── todo.sql package models todo.sql CREATE TABLE IF NOT EXISTS todo ( id SERIAL NOT NULL PRIMARY KEY, title VARCHAR(25), message VARCHAR(255), created_at TIMESTAMP, updated_at TIMESTAMP, finished_at TIMESTAMP ) models/db.go package models import ( "database/sql" "fmt" ) func NewDB() (*sql.
Read more

Go Todo練習 day1

gin-gonicとdatabase/sqlの基本的な動作は試せたので、早速ど定番のTodoアプリを作ってみます。やっぱ試してみないと不明点は見つかりにくいですしね! day1ということで簡単な内容で今回は作ります main.goのみ DBはpostgres使う TODOアプリで登録、取得のみ対応 作成したコードはsourjp/go-practice/day1にあります。 1. TODOを定義 ここでのポイントは FinishedAt の、*time.Time です。たとえ omitempty を使っていても、 time.Time のゼロ値は対象外(表示される)となります。 JSON omitempty With time.Time Fieldが参考になります。 そのため、pointerにしてnil扱いにすることでemptyと判定させることができます。 ただDBの視点で考えたときに、登録時にそもそもデータがないのだからomitempty関係なく空だからそりゃでないじゃんという・・・ 構造体をMarshalする時には知っといた方がいいポイントかと思いました。 type TODO struct { ID int `db:"id" json:"id"` Title string `db:"title" json:"title"` Message string `db:"message" json:"message"` CreatedAt time.Time `db:"created_at" json:"created_at"` FinishedAt *time.Time `db:"finished_at" json:"finished_at,omitempty"` } /* $ make t-get [ { "id": 1, "title": "study", "message": "study", "created_at": "2020-08-19T22:59:42.568475Z", "finished_at": "0001-01-01T00:00:00Z" <--- time.Timeのゼロ値で入れてしまった }, { "id": 2, "title": "study2", "message": "study2", "created_at": "2020-08-19T23:14:50.
Read more