일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Vue.js
- 러스트 기초 학습
- vue기초
- 티스토리챌린지
- redux 기초
- ethers typescript
- 러스트 기초
- ethers v6
- git rebase
- rust 기초
- SBT표준
- 체인의정석
- 머신러닝기초
- 스마트 컨트렉트 함수이름 중복
- erc4337 contract
- 러스트기초
- 오블완
- cloud hsm 서명
- 스마트컨트렉트 함수이름 중복 호출
- ethers type
- 스마트컨트렉트 예약어 함수이름 중복
- Vue
- 컨트렉트 동일한 함수이름 호출
- 계정추상화
- ethers websocket
- cloud hsm
- erc4337
- ambiguous function description
- cloud hsm 사용하기
- redux toolkit 설명
Archives
- Today
- Total
체인의정석
go 응답 값 타입 any처럼 유연하게 지정하기 interface 사용법 본문
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{} 가 쓰이는 경우는 다음과 같다고 한다.
- 외부 API의 응답 구조가 계속 바뀌는 경우
- 예: JSON 응답 스펙이 매번 다르거나, 필드가 동적으로 생성됨
- 해결: map으로 유연하게 접근
- 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
반응형
'개발 > backend(go)' 카테고리의 다른 글
로컬에서 go 공통 모듈을 수정하고 싶을 때 (replace) (1) | 2025.09.17 |
---|---|
API에서 블록체인 지갑 주소 받아올 때 해야할 필수 처리 (대소문자 처리 & 공백 제거) (2) | 2025.06.18 |
Go Gin으로 API 만들기: POST/GET 기본 구조 + Swagger 작성법 (1) | 2025.04.25 |
Go) JWT 발급 및 인증 로직 (백엔드) (0) | 2025.04.10 |
Go 언어로 메타 마스크 로그인 로직, Signature 검증 (백엔드) (0) | 2025.04.09 |
Comments