728x90
반응형
Nullable 데이터
- DB의 필드 중에 NULL 값이 들어갈 수 있는 값들이 있다. 이 값들을 쿼리해서 코드단에서 처리할 때 어떻게 해야 할까?
- 다른 언어들은 그냥 쿼리해서 사용하면 null 값으로 처리되던데...
Struct 정의
- 우선 쿼리된 결과를 원하는 값들에 할당해준다. 아래는 기존에 사용하던 코드
type SampleQueryItem struct {
UserId string `json:"userId"`
UserName string `json:"userName"`
UserEmail string `json:"userEmail"`
}
- 이렇게 하면 받아오는 데이터 세개 전부 값이 있다고 가능하는 셈이다.
- 이렇게 된다면 null 값들은 처리할 수 없다.
포인터 사용하기
type SampleQueryItem struct {
UserId string `json:"userId"`
UserName string `json:"userName"`
UserEmail *string `json:"userEmail"` // 포인터 사용
}
- 이렇게 처리하면 userEmail 값은 null 로 받아올 수 있다.
번외; 단건 조회 데이터가 없을 때
- 한 건 조회할 때, 쿼리 데이터가 없다면?
- golang은 심플함을 강조하기 때문에, 이러한 상황들을 직접 핸들링 해 줘야 한다.
기존 코드
var dataItem SampleQueryItem
if scanErr := queryResult.Scan(&dataItem.UserId, &dataItem.UserName, &dataItem.UserEmail);
scanErr != nil {
log.Printf("Scan Error: %v", scanErr)
return scanErr
}
- 이렇게 해 주면 scan 에러가 발생한다. 그 이유는 쿼리된 데이터가 없다는 것
수정된 코드
var dataItem SampleQueryItem
if scanErr := queryResult.Scan(&dataItem.UserId, &dataItem.UserName, &dataItem.UserEmail);
scanErr != nil {
// 데이터가 없는 에러는 error 에러를 리턴하지 않게 해서 에러로 빠지지 않게 한다.
if scanErr == sql.NoRowError {
return SampleQueryItem{}, nil
}
log.Printf("Scan Error: %v", scanErr)
return SampleQueryItem{}, scanErr
}
- 조회된 데이터가 없는 것은 에러로 처리된다. scan 할 데이터가 없기 때문
- 위 처럼 쿼리 후 에러 핸들링을 하면, 에러 처리로 넘기지 않고 빈 데이터를 넘길 수 있다.
728x90
반응형
'백엔드 Backend > Golang' 카테고리의 다른 글
[AUTH] Cookie를 이용한 검증 (0) | 2025.01.21 |
---|---|
[CORS] CORS 설정 - 라이브러리 이용 (0) | 2025.01.20 |
[gRPC] Go 언어로 gRPC 사용해보기 (2) | 2024.12.24 |
[Neo4J] 데이터 핸들링하기 (1) | 2024.12.09 |
[Neo4j] Golang 으로 쿼리 핸들링 (0) | 2024.12.06 |