안녕하세요. 오늘은 Golang에서 구조체 태그에 대해 자세히 설명하고자 합니다. 구조체 태그는 데이터 직렬화나 데이터베이스에서 데이터를 가져올 때 매우 중요한 역할을 합니다. 이 글에서는 구조체 태그의 기본 사용법부터 실제 코드 예제까지 다루어보겠습니다.
구조체 태그의 기본
구조체 태그는 구조체 필드와 메타데이터를 연결하는 데 사용됩니다. 일반적으로 데이터베이스의 컬럼 이름이나 JSON 데이터의 키로 사용됩니다. 다음은 기본 구조체 태그의 예입니다.
type User struct {
ID int `json:"id" db:"user_id"`
Username string `json:"username" db:"user_name"`
}
위 예제에서 User
구조체의 ID
필드는 json
태그와 db
태그가 달려 있습니다. 이를 통해 이 구조체는 JSON과 데이터베이스 간의 상호 변환을 쉽게 수행할 수 있습니다.
코드 예제1: JSON 직렬화 및 역직렬화
다음은 Golang에서 JSON 데이터를 직렬화(구조체 → JSON)하고 역직렬화(JSON → 구조체)하는 방법을 보여주는 코드 예제입니다.
package main
import (
"encoding/json"
"fmt"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
}
func main() {
user := User{ID: 1, Username: "JohnDoe"}
// 구조체를 JSON으로 변환
jsonData, err := json.Marshal(user)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(jsonData))
// JSON을 구조체로 변환
var newUser User
if err := json.Unmarshal(jsonData, &newUser); err != nil {
fmt.Println(err)
return
}
fmt.Println(newUser)
}
코드 예제2: 데이터베이스 쿼리
다음은 Golang에서 데이터베이스에서 데이터를 가져오는 방법을 보여주는 코드 예제입니다.
package main
import (
"database/sql"
"fmt"
"github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
ID int `db:"user_id"`
Username string `db:"user_name"`
}
func main() {
// 데이터베이스 연결 설정
db, err := sqlx.Connect("mysql", "사용자명:비밀번호@tcp(localhost:3306)/데이터베이스명")
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
// 데이터베이스에서 데이터 가져오기
var users []User
err = db.Select(&users, "SELECT user_id, user_name FROM users")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(users)
}
코드 예제3: 유효성 검사
구조체 태그는 입력 데이터의 유효성 검사에도 사용할 수 있습니다. 다음은 입력 데이터를 유효성 검사하기 위해 구조체 태그를 사용하는 예제입니다.
type User struct {
ID int `json:"id"`
Username string `json:"username" validate:"required,min=5"`
}
// 유효성 검사 라이브러리를 사용하여 검사
func createUser(user User) error {
validate := validator.New()
if err := validate.Struct(user); err != nil {
return err
}
// 사용자 생성
// ...
return nil
}
코드 예제4: 태그의 사용자 정의
구조체 태그는 사용자 정의 용도로도 사용할 수 있습니다. 예를 들어, 사용자 정의 데이터 직렬화기나 ORM 라이브러리 구현에 사용할 수 있습니다.
이 글을 통해 Golang 구조체 태그의 기본 개념과 실제 사용 사례에 대한 이해가 높아졌을 것입니다. 구조체 태그는 데이터 처리 및 직렬화/역직렬화에서 강력한 도구이며, 구조체 태그를 효과적으로 활용하면 코드 효율성과 가독성을 향상시킬 수 있습니다. 새 프로젝트에서 이러한 기술을 적극 활용해 보시기 바랍니다. 즐거운 코딩 되세요!