체인의정석

go 응답 값 타입 any처럼 유연하게 지정하기 interface 사용법 본문

개발/backend(go)

go 응답 값 타입 any처럼 유연하게 지정하기 interface 사용법

체인의정석 2025. 6. 11. 14:58
728x90

interface를 따로 쓰면 쓰면 따로 응답 값 타입을 지정하지 않고도 리턴이 가능하다고 한다.

마치 ts의 any 같다.

✅ interface{} = TypeScript의 any

Go에서는 모든 타입이 interface{}를 만족하기 때문에, 아래와 같이 어떤 값이든 담을 수 있다.

var v interface{}

v = 123         // int
v = "hello"     // string
v = []string{}  // slice

🔄 예: TypeScript와 비교

TypeScriptGo
any interface{}
Record<string, any> map[string]interface{}
any[] []interface{}


map[string]interface{} 가 쓰이는 경우는 다음과 같다고 한다.

  1. 외부 API의 응답 구조가 계속 바뀌는 경우
    • 예: JSON 응답 스펙이 매번 다르거나, 필드가 동적으로 생성됨
    • 해결: map으로 유연하게 접근
  2. MongoDB의 자유로운 document 구조를 다룰 때
    각 document가 다른 필드를 가질 수 있기 때문에 고정된 struct가 애매할 수 있음
var results []map[string]interface{}
cursor.All(ctx, &results)

 3. JSON을 중간 단계에서 파싱만 하고 재구성할 때

  • 데이터를 분석하거나, 필터링만 하고 다른 포맷으로 내보낼 경우 struct까지 만들 필요는 없음

따라서 다음과 같이 타입을 정의해주고 쓰는것이 좋을것 같다.

type Product struct {
    ID    string  `json:"id"`
    Name  string  `json:"name"`
    Price float64 `json:"price"`
}

var products []Product

 

728x90
반응형
Comments