0Pricing
Go Academy · 강의

구조체 필드와 태그 검사

필드를 순회하고 구조체 태그를 읽습니다.

구조체 필드와 태그 검사은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. reflect.Type와 reflect.Value
  2. 구조체 필드와 태그 검사
  3. 동적 함수 호출
  4. 실전 리플렉션: 직렬화기
← Go Academy(으)로 돌아가기