만약 내가 받아야 할 인자가 어떤 타입이 될지 모를 때가 있다.
Golang의 단점으로 꼽히는 제네릭이 없다는 것이 이 Interface를 쓰기 불편하기 때문인 것도 다소 있다.
현재 프로젝트에서 Golang으로 API 를 만들고 있는데,
응답을 받는 쪽에서도 편하게 하려고, 한가지의 타입을 정해놓고
제작을 하고 있다.
API 뿐만 아니라 DB와의 연결 부분에서도 이 Success라는 타입을 주고 받고 있는데,
문제는 여기서 생긴다.
Payload 는 interface이기에 만약
내부에서 이 Success의 payload를 사용하고자 하면,
타입에대한 지정을 해줘야 하는 것이다.
type TEST struct {
A int
}
func typeSwitch(arg interface{}) {
switch arg.(type) {
case TEST:
log.Println("타입은 TEST입니다.")
return
}
}
간만에 책을 좀 뒤져보면 이런 예제부터 나온다.
switch로 선언된 타입을 분류해서 사용하는 예제 인데,
interface는 처음에 받은 타입을 기억하고 있다 라는 이야기이다.
사용할때는
args.(TEST)
이런 형태를 취해서 사용 한다.
현재는 내부적으로 payload를 사용하는 부분이 DB에 한정되어있어,
타입 지정을 몇개 안해도되서 괜찮다만,
당연히 리팩토링할때는, 좀더 확장성을 고려한 구조로 개편 할 예정이다.
아마, 기억상 reflect를 이용하면 만들 수 있지 않을까?
다음에 리팩토링 할때 reflect를 이용한 구조로 다시 블로깅 해보겠다.
'BackEnd > GoLang' 카테고리의 다른 글
WebSocket send를 할시 계속 disconnect 되는 현상 (0) | 2021.09.22 |
---|---|
Golang으로 WebSocket과 JSON Data 주고받기 (0) | 2021.08.24 |
Golang Gin FormData 주고 받을때 (0) | 2021.08.18 |