Map database records to Go structs
Let’s suppose the database we’re working on has a “books” table that was created like this:
CREATE TABLE "books" (
"id" INTEGER NOT NULL,
"title" VARCHAR NOT NULL,
"author_id" INTEGER,
"subject_id" INTEGER,
CONSTRAINT "books_id_pkey" PRIMARY KEY ("id")
);
We can represent a single record from such table and the fields accompanying it with a Go struct accompanied by struct tags in exported fields:
type Book struct {
ID uint `db:"id"`
Title string `db:"title"`
AuthorID uint `db:"author_id"`
SubjectID uint `db:"subject_id"`
}
The db
field tag will then be required so upper/db
can map columns to
struct fields.
Please note that:
Fields and columns must be similar in type (
upper/db
will handle most reasonable conversions automatically).Fields must be exported and have a
db
tag, otherwise they will be ignored.
In the event the table contains a column configured to represent
automatically-generated values like IDs, serials, dates, etc. the omitempty
option will have to be added to the db
tag:
type Book struct {
ID uint `db:"id,omitempty"`
}
This option will make upper/db
ignore zero-valued fields when building INSERT
and UPDATE statements so they can be correctly generated by the database
itself.