Hello, today we’ll dive deep into Golang struct tags. Struct tags play a crucial role when it comes to serializing data or retrieving data from a database. In this article, we will cover the basics of struct tags and provide practical code examples.
Basics of Struct Tags
Struct tags are used to associate metadata with struct fields, commonly used for database column names or JSON data keys. Here’s an example of basic struct tags:
type User struct {
ID int `json:"id" db:"user_id"`
Username string `json:"username" db:"user_name"`
}
In the above example, the User
struct’s ID
field has json
and db
tags, making it easy to perform conversions between JSON and databases.
Code Example 1: JSON Serialization and Deserialization
Here’s a Golang code example demonstrating how to serialize (struct to JSON) and deserialize (JSON to struct) data using struct tags:
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"}
// Convert struct to JSON
jsonData, err := json.Marshal(user)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(jsonData))
// Convert JSON to struct
var newUser User
if err := json.Unmarshal(jsonData, &newUser); err != nil {
fmt.Println(err)
return
}
fmt.Println(newUser)
}
Code Example 2: Database Queries
The following Golang code example illustrates how to retrieve data from a database using struct tags:
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() {
// Set up the database connection
db, err := sqlx.Connect("mysql", "username:password@tcp(localhost:3306)/dbname")
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
// Retrieve data from the database
var users []User
err = db.Select(&users, "SELECT user_id, user_name FROM users")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(users)
}
Code Example 3: Validation
Struct tags can also be used for validating input data. Here’s an example using struct tags to validate input data:
type User struct {
ID int `json:"id"`
Username string `json:"username" validate:"required,min=5"`
}
// Validate using a validation library
func createUser(user User) error {
validate := validator.New()
if err := validate.Struct(user); err != nil {
return err
}
// Create the user
// ...
return nil
}
Code Example 4: Custom Use of Tags
Struct tags can be used for custom purposes, such as creating custom data serializers or implementing ORM libraries.
By reading this article, you should have a better understanding of the basics of Golang struct tags and practical use cases. Struct tags are powerful tools for data processing and serialization/deserialization, and effective use of struct tags can improve code efficiency and readability. Feel free to utilize these techniques in your new projects. Happy coding!