리플렉션 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

구조체 태그 가져오기

다음과 같이 리플렉션으로 구조체의 태그도 가져올 수 있습니다.

package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	name string `tag1:"이름" tag2:"Name"` // 구조체에 태그 설정
	age  int    `tag1:"나이" tag2:"Age"`  // 구조체에 태그 설정
}

func main() {
	p := Person{}

	name, ok := reflect.TypeOf(p).FieldByName("name")
	fmt.Println(ok, name.Tag.Get("tag1"), name.Tag.Get("tag2")) // true 이름 Name

	age, ok := reflect.TypeOf(p).FieldByName("age")
	fmt.Println(ok, age.Tag.Get("tag1"), age.Tag.Get("tag2")) // true 나이 Age
}

실행 결과

true 이름 Name
true 나이 Age

구조체 필드의 태그는 `태그명:"내용"` 형식으로 지정합니다. 태그는 문자열 형태이며 문자열 안에 " " (따옴표)가 포함되므로 ` ` (백쿼트)로 감싸줍니다. 여러 개를 지정할 때는 공백으로 구분해줍니다.

reflect.TypeOf 함수에 구조체 인스턴스를 넣으면 reflect.Type이 리턴됩니다. 여기서 FieldByName 함수에 구조체의 필드 이름을 지정하면 필드 정보를 얻을 수 있습니다. 두 번째 리턴값은 해당 이름으로 필드가 존재하는지 여부입니다. 필드 정보를 얻은 뒤에는 name.Tag.Get(“tag1”)과 같이 태그를 가져올 수 있습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015