구조체 필드와 태그 검사
필드를 순회하고 구조체 태그를 읽습니다.
구조체 필드와 태그 검사은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
StructField 타입
reflect.StructField는 구조체의 한 필드를 설명합니다. 여기에는 Name, Type, Tag, Index, Offset, Anonymous, IsExported가 포함됩니다.
필드 순회
구조체 타입의 모든 필드를 순회합니다:
t := reflect.TypeOf(struct{ ID int; Name string }{})
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Println(f.Name, f.Type, f.IsExported())
}구조체 태그 읽기
StructField.Tag.Get("key")를 사용하여 태그에 접근합니다:
type User struct {
ID int `json:"id" db:"user_id"`
Name string `json:"name,omitempty"`
}
f, _ := reflect.TypeOf(User{}).FieldByName("Name")
fmt.Println(f.Tag.Get("json")) // "name,omitempty"태그 옵션 구문 분석
태그에는 쉼표로 구분된 옵션이 포함될 수 있습니다. strings.Split을 사용하여 구문 분석합니다:
tag := f.Tag.Get("json") // "name,omitempty"
parts := strings.Split(tag, ",")
name := parts[0] // "name"
omitempty := len(parts) > 1 && parts[1] == "omitempty"FieldByName 및 FieldByIndex
이름이나 인덱스로 필드를 조회합니다. FieldByName은 구조체와 임베드된 구조체에서 내보낸 필드를 검색합니다:
f, ok := reflect.TypeOf(User{}).FieldByName("Name")
if ok { fmt.Println(f.Tag.Get("json")) }임베드된 구조체 필드
임베드된 구조체에서는 Anonymous가 true입니다. Type.FieldByIndex([]int{0,1})을 사용하여 중첩된 필드에 접근합니다.
내보내지 않은 필드
내보내지 않은 필드(소문자 필드)는 타입과 태그를 검사할 수 있지만, 리플렉션으로 값을 읽거나 설정할 수는 없습니다. 그렇게 하면 패닉이 발생합니다.
필드 캐시 구축
호출할 때마다 구조체 태그를 구문 분석하면 비용이 많이 듭니다. reflect.Type을 키로 사용하는 sync.Map에 결과를 캐시합니다:
var fieldCache sync.Map
func getFields(t reflect.Type) []fieldInfo {
if v, ok := fieldCache.Load(t); ok { return v.([]fieldInfo) }
fields := parseFields(t)
fieldCache.Store(t, fields)
return fields
}사용 사례: 간단한 ORM
"db" 태그가 있는 모든 필드를 순회하여 INSERT 열 목록을 동적으로 구축합니다:
t := reflect.TypeOf(u)
v := reflect.ValueOf(u)
for i := 0; i < t.NumField(); i++ {
col := t.Field(i).Tag.Get("db")
val := v.Field(i).Interface()
// build query...
}사용 사례: 설정 로더
"env" 태그가 있는 구조체 필드를 순회하고 환경 변수에서 값을 채웁니다:
if env := f.Tag.Get("env"); env != "" {
if val := os.Getenv(env); val != "" {
v.Field(i).SetString(val)
}
}StructTag.Lookup
Tag.Lookup("key")는 태그 값과 해당 키가 실제로 존재했는지를 나타내는 부울 값을 반환합니다. 키가 없을 때도 ""을 반환하는 Get과는 다릅니다.
val, ok := f.Tag.Lookup("json")
if !ok { /* no json tag */ }빠른 확인
reflect.StructField에서 "json" 구조체 태그의 값을 어떻게 읽습니까?
요약: 구조체 필드 및 태그
핵심 내용:
- 필드 메타데이터에는 reflect.TypeOf → .NumField(), .Field(i)를 사용합니다
- 태그 값을 읽으려면 StructField.Tag.Get("key")를 사용합니다
- 반복되는 구문 분석을 피하려면 필드 메타데이터를 sync.Map에 캐시합니다
- 태그가 없는 경우와 빈 문자열을 구분해야 할 때는 Tag.Lookup을 사용합니다
자주 묻는 질문
“구조체 필드와 태그 검사” 강의는 무료인가요?
네 — “구조체 필드와 태그 검사” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“구조체 필드와 태그 검사”에서 뭘 배우나요?
필드를 순회하고 구조체 태그를 읽습니다. 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“구조체 필드와 태그 검사” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- reflect.Type와 reflect.Value
- 구조체 필드와 태그 검사
- 동적 함수 호출
- 실전 리플렉션: 직렬화기