MST

星途 面试题库

面试题:Go语言中结构体标签(struct tag)的作用及如何使用

在Go语言里,结构体标签(struct tag)常用于结构体字段声明之后。请解释结构体标签的作用,并举例说明如何定义和获取结构体标签的值。
35.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

结构体标签的作用

  1. 元数据存储:结构体标签用于为结构体字段存储额外的元数据。这些元数据不直接参与结构体实例的数据存储,但可以被特定的库或代码逻辑用于各种目的,例如序列化和反序列化、ORM(对象关系映射)操作等。
  2. 标记与配置:为结构体字段提供标记或配置信息,以指导外部工具或库如何处理该字段。

定义结构体标签

在Go语言中,结构体标签紧跟在字段类型之后,是一个用反引号括起来的字符串。例如:

type User struct {
    Name string `json:"name" db:"name"`
    Age  int    `json:"age" db:"age"`
}

在上述例子中,Name 字段有两个标签 json:"name"db:"name"json:"name" 表示在JSON序列化和反序列化时,该字段对应的JSON键为 namedb:"name" 表示在数据库相关操作(如ORM)中,该字段对应的数据库列名为 name

获取结构体标签的值

要获取结构体标签的值,通常需要使用反射(reflect)包。以下是一个示例:

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Name string `json:"name" db:"name"`
    Age  int    `json:"age" db:"age"`
}

func main() {
    var u User
    typeOf := reflect.TypeOf(u)
    for i := 0; i < typeOf.NumField(); i++ {
        field := typeOf.Field(i)
        jsonTag := field.Tag.Get("json")
        dbTag := field.Tag.Get("db")
        fmt.Printf("Field: %s, JSON Tag: %s, DB Tag: %s\n", field.Name, jsonTag, dbTag)
    }
}

上述代码通过反射获取 User 结构体每个字段的标签值,并打印出来。运行结果如下:

Field: Name, JSON Tag: name, DB Tag: name
Field: Age, JSON Tag: age, DB Tag: age