문제
다른 포스팅에도 썼는데,
parsing time "\"2016-01-02 15:04:05\"" as "\"2006-01-02T15:04:05Z07:00\"": cannot parse " 15:04:05\"" as "T"
이런 에러가 난다. Go 에서는 날짜가 정말 문제가 많은것같다. 5년전에도 부장님이 이런 말을 했었는데... .
- fiber에서 bodyparse로 파싱이 안됨.
- custom으로 파싱을해도 gorm 에 입력이 안됨
두가지 문제였다.
첫번째 문제는 지난번에 해결했었음
근데 두번째 문제가 해결이 안되었음
해결
코드를 보여준다
// HHMMTime 구조체를 정의합니다.
type HHMMTime struct {
time.Time
}
// Value 메서드는 데이터베이스에 값을 쓸 때 호출됩니다.
func (ct HHMMTime) Value() (driver.Value, error) {
// 시간을 "hh:mm" 형식의 문자열로 변환하여 데이터베이스에 전달합니다.
return ct.Format("15:04"), nil
}
// Scan 메서드는 데이터베이스에서 값을 읽을 때 호출됩니다.
func (ct *HHMMTime) Scan(value interface{}) error {
if value == nil {
return nil
}
strValue, ok := value.(string)
if !ok {
return fmt.Errorf("Invalid HHMMTime value")
}
// "hh:mm" 형식의 문자열을 시간으로 파싱합니다.
parsedTime, err := time.Parse("15:04", strValue)
if err != nil {
return err
}
ct.Time = parsedTime
return nil
}
const MyTimeFormat = "15:04"
const MyLocation = "Asia/Seoul"
func (ct *HHMMTime) UnmarshalJSON(bs []byte) error {
var s string
err := json.Unmarshal(bs, &s)
if err != nil {
return err
}
location, err := time.LoadLocation(MyLocation)
if err != nil {
return err
}
t, err := time.ParseInLocation(MyTimeFormat, s, location)
if err != nil {
return err
}
ct.Time = t
return nil
}
아래 unmarshalJSON 이 bodyparse 하기 위한거고
나머지 위에가 gorm 을 사용하기 위한 custom 사용방법이다.
java는 이런게 잘 되는데 이건 뭐 이따구인지...
문제가 또 생겼땅. ..
위처럼 하면 insert는 잘 되는데
select 가 문제다
큰 요지만 말하자면... DB에서 꺼내오는것은 문제가없다. ( 약간은 문제가 있는게 나는 HH:MM 을 저장해도 hh:mm:ss 로 DB에 저장됨 )
다만, Time.time 에 넣게되면 다시 HH:MM:SS 가 yyyy-mm-dd hh:mm:ss 로 바뀐다.
이러면 컨버팅해줘야하는게 수도없이 많다...
그래서 ... 결심함'
go 에서는 날짜를 날짜로 저장하지 않을것이다. 거의 풀사이즈 날짜,시간데이터만 날짜로 저장하고, 날짜,시간의부분데이터는 문자열로 저장할것이다
'Web > GoLang' 카테고리의 다른 글
golang 책 원본 Zhihu 지후 (질문답변사이트) (0) | 2024.03.21 |
---|---|
[gorm] mysql json 구조 쿼리 및 JSON_OVERLAPS (0) | 2023.09.05 |
[golang] stringer 열거형이나 const 일때 자동으로 tostring 할수 있는 제터레이터 auto-generate Stringer tool of Golang (0) | 2023.08.22 |
[golang] time 타입 parsing 오류 (parsing time "~~~" as "~~~": cannot parse "~~~" as "~~~") (0) | 2023.08.22 |
[gorm] many2many Association 관계 (0) | 2023.08.16 |
댓글