前提
DBはMySQL。
ORMはgorpを使用している。
DNSには?parseTime=true
が入ってる。
問題
テーブルにDATE型(日付)とTIME型(時刻)のカラムがそれぞれあって。
CREATE TABLE `post` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`date` date DEFAULT NULL,
`time` time DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
GoのstructではDate
,Time
の両方とも*time.Time
型にしている。
type Post struct {
Id int64
Date *time.Time
Time *time.Time
}
gorpを使って、DBから取得したデータをPost(Goのstruct)に格納するわけだ。
query := "SELECT * FROM post"
var list []Post
_, err := DbMap.Select(&list, query)
したらScan error on column
と怒られる。
sql: Scan error on column index 1: unsupported Scan, storing driver.Value type []uint8 into type *time.Time
対処法
SQLの方を修正。 ADDTIME
で日付と時刻を足しあわせ、DATETIME型にCAST
する。
SELECT id, date, CAST(ADDTIME(date, time) AS DATETIME) datetime FROM post
他にもっと良い方法があれば教えてください。
参考
Go言語のMySQLドライバでTIME型のカラムのデータを受け取りたいとき
GolangでScan error
が出た時の対応