Size: a a a

2020 May 16

DS

Dmitry Soloma in Go-go!
Azat Kilibayev
Рефлект видит только поля time и valid sql.nulltime
тогда нужен тикет разработчикам, что бы они починили
источник

AK

Azat Kilibayev in Go-go!
Есть поле типа sql.nulltime в каких нибудь структурах, например их 50 штук. Их необходимо выводить в json с разными форматами времени. Чтобы в каждой структуре не писать свой marshaljson, я обернул sql.nulltime в свой тип, допустим nulltime. Теперь в json выводится нормально null либо значение времени.
источник

AK

Azat Kilibayev in Go-go!
Теперь задача чтобы независимо задавать формат например а тэге.
источник

AK

Azat Kilibayev in Go-go!
Можете помочь как это реализовать.
источник

DS

Dmitry Soloma in Go-go!
сколько у вас всего форматов?
источник

AK

Azat Kilibayev in Go-go!
Dmitry Soloma
сколько у вас всего форматов?
10
источник

AK

Azat Kilibayev in Go-go!
Просто не в количестве форматах
источник

AK

Azat Kilibayev in Go-go!
Вопрос, а чтобы можно было задавать в теге любой формат
источник

DS

Dmitry Soloma in Go-go!
10 форматов времени на проекте? Не хотите свести все к 2-3м? У вас система как этим количеством работает?
источник

DS

Dmitry Soloma in Go-go!
в общем  reflect успешно читает теги, главное что бы они были правильно описаны
источник

Z

Zver in Go-go!
Azat Kilibayev
Теперь задача чтобы независимо задавать формат например а тэге.
Тогда свой маршалер структур писать придется. Но вообще лучше лазерные структуры использовать для обмена и для записи в бд.
источник

AK

Azat Kilibayev in Go-go!
Zver
Тогда свой маршалер структур писать придется. Но вообще лучше лазерные структуры использовать для обмена и для записи в бд.
Да в том и вопрос чтобы для каждой стуктуры не писать маршалер
источник

AK

Azat Kilibayev in Go-go!
Рефлектом не получилось из маршалера nulltime прочитать теги структуры request
источник

AK

Azat Kilibayev in Go-go!
Он видит только поля sql.nulltime
источник

DS

Dmitry Soloma in Go-go!
Azat Kilibayev
Рефлектом не получилось из маршалера nulltime прочитать теги структуры request
json:"time" format:"02.01.2006" - уберите пробел
источник

AK

Azat Kilibayev in Go-go!
Dmitry Soloma
json:"time" format:"02.01.2006" - уберите пробел
Сорри не понял
источник

DS

Dmitry Soloma in Go-go!
между тегам пробел
источник

X

Xo in Go-go!
Там вроде должна быть запятая а не пробел
источник

DS

Dmitry Soloma in Go-go!
там должно быть пусто
источник

Z

Zver in Go-go!
Azat Kilibayev
package main

import (
 "database/sql"
 "encoding/json"
 "fmt"
 "time"
)

type Request struct {
 SomeString string 'json:"str"'
 Time NullTime 'json:"time" format:"02.01.2006"'
}

type NullTime struct {
 sql.NullTime
}

func (m NullTime) MarshalJSON() ([]byte, error) {
 if m.Valid {
   s :=  '"'+m.Time.Format("02.01.2006")+'"'
   return []byte(s), nil
 }
 return []byte(null), nil
}

func main(){
 r:=Request{
   SomeString: "test",
   Time:       NullTime{},
 }
 res,err:=json.Marshal(r)
 if err != nil {
   panic(err)
 }
 fmt.Println(string(res))//{"str":"test","time":null}
 r2:=Request{
   SomeString: "test2",
   Time:       NullTime{sql.NullTime{time.Now(),true}},
 }
 res2,err2:=json.Marshal(r2)
 if err2 != nil {
   fmt.Println(err2)
 }
 fmt.Println(string(res2))//{"str":"test2","time":"16.05.2020"}
}
А зачем в json свой формат времени? 🤔 Потом все, кто будет анмаршалить его, будут мучиться и страдаеть.
источник