가장 빨리 만나는 Go 언어 Unit 36.1 구조체 태그 가져오기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

리플렉션 사용하기

이재홍 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

2015-06-01