golang DBのcolumnにBIGINTで定義したUnix timeをstructに代入

1.条件
DBのcolumnにBIGINTで定義したUnix timeをfieldをinteface型で宣言したstructに代入する
この時、database/sql pkgをValidでNullの確認

2.結論
sql.NullString を使う場合とsql.NullInt64 を使う場合で結果は同じ

3.処理のStep
(1) DB側:NULLを含むBIGINTで定義したものにUnix timeを保存
(2) DBからQueryのSELECT文でUnix timeを取り出す
(3) 取り出す変数の型を変えてみる
・sql.NullString を使う場合
・sql.NullInt64 を使う場合
(4) Unix timeをfieldをinteface型で宣言したstructに代入する

4.code :Queryでsql.NullStringを使い取り出した場合、Sprintfは”%s”で変換

type session_s struct {
   Session_id    string      `json:"session_id"`
   Login_time    interface{} `json:"login_time"`
   Logout_time   interface{} `json:"logout_time"`
}
var _r session_s_s;
・・・
var session_id string;
var login , logout sql.NullString;
var NULL interface {};

for rows.Next() {
   _ = rows.Scan( &session_id, &login, &logout);

   if login.Valid {
      r.Login_time = fmt.Sprintf("%s",login.String);
   } else {
      _r.Login_time = NULL;
   }
   if logout.Valid {
      _r.Logout_time = fmt.Sprintf("%s",logout.String);
   } else {
      _r.Logout_time = NULL;
   }
   fmt.Println("{",_r.Login_time,":", _r.Logout_time,"}");
}

5.実行結果

{ 1641787646985 : 1641792373964 }
{ 1641792428859 : <nil> }
{ 1641852057966 : <nil> }
{ 1641852062604 : 1641856423049 }
{ 1641856427860 : <nil> }

6.code Queryでsql.NullInt64を使い取り出した場合、Sprintfは”%d”で変換

type session_s struct {
   Session_id    string      `json:"session_id"`
   Login_time    interface{} `json:"login_time"`
   Logout_time   interface{} `json:"logout_time"`
}
var _r session_s_s;
・・・
var session_id string;
var login , logout sql.NullInt64;
var NULL interface {};

for rows.Next() {
   _ = rows.Scan( &session_id, &login, &logout);

   if login.Valid {
      r.Login_time = fmt.Sprintf("%d",login.String);
   } else {
      _r.Login_time = NULL;
   }
   if logout.Valid {
      _r.Logout_time = fmt.Sprintf("%d",logout.String);
   } else {
      _r.Logout_time = NULL;
   }
   fmt.Println("{",_r.Login_time,":", _r.Logout_time,"}");
}

7.実行結果

{ 1641787646985 : 1641792373964 }
{ 1641792428859 : <nil> }
{ 1641852057966 : <nil> }
{ 1641852062604 : 1641856423049 }
{ 1641856427860 : <nil> }