Trung BìnhGolang iconGolang

Struct tags trong Go là gì và dùng thế nào?

Struct tags là metadata gắn vào field của struct dưới dạng string literal sau tên field, được đọc tại runtime thông qua reflection.

Phổ biến nhất là JSON tags và validation tags.

go
type User struct {
    ID        int       `json:"id" db:"user_id"`
    Name      string    `json:"name" validate:"required,min=2"`
    Email     string    `json:"email" validate:"required,email"`
    Password  string    `json:"-"`                      // bỏ qua khi encode JSON
    CreatedAt time.Time `json:"created_at,omitempty"`  // bỏ qua nếu zero value
}

// Đọc tag lúc runtime
t := reflect.TypeOf(User{})
field, _ := t.FieldByName("Email")
fmt.Println(field.Tag.Get("json"))     // "email"
fmt.Println(field.Tag.Get("validate")) // "required,email"

Các tags phổ biến:
- json:"name,omitempty" — encoding/json
- db:"column_name" — sqlx, GORM
- validate:"required,min=3" — go-playground/validator
- yaml:"field_name" — gopkg.in/yaml.v3
- env:"ENV_VAR" — envconfig

Tags không ảnh hưởng đến type safety tại compile time, chỉ có ý nghĩa khi package đọc chúng qua reflection.

Xem toàn bộ Golang cùng filter theo level & chủ đề con.

Mở danh sách Golang