Go에서 태그 만들기
구조체라고도 하는 구조체는 여러 데이터 비트를 단일 엔터티로 결합합니다. 이러한 데이터 세트는 집 번호, 거리, 도시, 주 및 우편 번호로 구성된 주소와 같은 상위 수준 개념을 정의합니다.
struct
태그를 사용하여 데이터베이스나 API와 같은 시스템에서 이 정보를 읽을 때 구조체의 필드에 이 정보가 할당되는 방식을 조절할 수 있습니다. Struct
태그는 구조체의 필드에 연결된 짧은 메타데이터로, 구조체와 상호 작용하는 다른 Go 코드에 지침을 제공합니다.
이것은 구조체에 메타 데이터를 추가하는 방법입니다. 패키지 또는 타사 응용 프로그램에서 데이터를 활용하여 특정 작업을 수행하거나 데이터를 적절하게 처리하는 방법을 결정할 수 있습니다.
이 메타 데이터는 공백으로 구분되며 key: value
형식의 문자열 리터럴을 사용하여 선언됩니다. 동일한 필드에 여러 태그가 존재하여 고유한 목적과 라이브러리를 제공합니다.
이 튜토리얼은 Go의 struct
기능을 사용하여 태그를 생성하는 방법을 보여줍니다.
Go에서 struct
함수를 사용하여 태그 만들기
이 예에서는 이름 필드가 있는 User
유형이 정의됩니다. name
의 struct
태그가 이름 열에 추가되었습니다.
예 1:
package main
import "fmt"
type User struct {
Name string `example:"name"`
}
func (u *User) String() string {
return fmt.Sprintf("Hello, I am %s", u.Name)
}
func main() {
u := &User{
Name: "Jay Singh",
}
fmt.Println(u)
}
출력:
Hello, I am Jay Singh
태그에 액세스하고 사용하려면 reflect
패키지를 사용해야 합니다.
기존 형식을 사용하는 경우 StructTag
의 Get
및 Lookup
메서드를 사용하여 태그에 대한 정보에 액세스할 수 있습니다. Lookup
메소드는 필드에서 태그를 찾았는지 여부를 나타내는 ok
값도 반환합니다.
예 2:
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string `color:"white"`
Age int `color:"black"`
Email string
}
func main() {
a := User{"Jay", 99, "example@jay.com"}
ut := reflect.TypeOf(a)
for i := 0; i < ut.NumField(); i++ {
field := ut.Field(i)
if color, ok := field.Tag.Lookup("color"); ok {
if color == "" {
fmt.Println("(blank)")
} else {
fmt.Println(color)
}
} else {
fmt.Println("(Not Specified)")
}
}
}
출력:
white
black
(Not Specified)
Go에서 JSON을 사용하여 태그 만들기
표준 라이브러리의 JSON 인코더는 struct
태그를 주석으로 사용하여 JSON 출력에서 필드 이름을 지정하는 방법을 인코더에 알려줍니다. encoding/json
패키지에는 이러한 JSON 인코딩 및 디코딩 메커니즘이 포함되어 있습니다.
JSON이 struct
태그 없이 인코딩되는 방법을 이해하려면 다음 예제를 시도하십시오.
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"time"
)
type User struct {
Name string
Password string
Address []string
CreatedAt time.Time
}
func main() {
a := &User{
Name: "Jay Singh",
Password: "qwertyuiop",
CreatedAt: time.Now(),
}
out, err := json.MarshalIndent(a, "", " ")
if err != nil {
log.Println(err)
os.Exit(1)
}
fmt.Println(string(out))
}
출력:
{
"Name": "Jay Singh",
"Password": "qwertyuiop",
"Address": null,
"CreatedAt": "2022-03-10T23:00:00Z"
}