Golang 구조체 태그: 코드 예제와 상세 설명

안녕하세요. 오늘은 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 구조체 태그의 기본 개념과 실제 사용 사례에 대한 이해가 높아졌을 것입니다. 구조체 태그는 데이터 처리 및 직렬화/역직렬화에서 강력한 도구이며, 구조체 태그를 효과적으로 활용하면 코드 효율성과 가독성을 향상시킬 수 있습니다. 새 프로젝트에서 이러한 기술을 적극 활용해 보시기 바랍니다. 즐거운 코딩 되세요!

タイトルとURLをコピーしました