基本介绍

gstructs组件用于方便获取结构体的相关信息。

这是一个偏底层组件,一般业务上很少会用到,在框架、基础库、中间件编写中用到。

使用方式:

  1. import "github.com/gogf/gf/v2/os/gstructs"

接口文档:

https://pkg.go.dev/github.com/gogf/gf/v2/os/gstructs

常用方法

Fields

  • 说明:Fields 将输入参数inPointer 属性的字段以Field切片的形式返回。

  • 格式:

    1. Fields(in FieldsInput) ([]Field, error)
  • 示例:

    1. func main() {
    2. type User struct {
    3. Id int
    4. Name string `params:"name"`
    5. Pass string `my-tag1:"pass1" my-tag2:"pass2" params:"pass"`
    6. }
    7. var user *User
    8. fields, _ := gstructs.Fields(gstructs.FieldsInput{
    9. Pointer: user,
    10. RecursiveOption: 0,
    11. })
    12. g.Dump(fields)
    13. }
    14. // Output:
    15. [
    16. {
    17. Value: "<int Value>",
    18. Field: {
    19. Name: "Id",
    20. PkgPath: "",
    21. Type: "int",
    22. Tag: "",
    23. Offset: 0,
    24. Index: [
    25. 0,
    26. ],
    27. Anonymous: false,
    28. },
    29. TagValue: "",
    30. },
    31. {
    32. Value: {},
    33. Field: {
    34. Name: "Name",
    35. PkgPath: "",
    36. Type: "string",
    37. Tag: "params:\"name\"",
    38. Offset: 8,
    39. Index: [
    40. 1,
    41. ],
    42. Anonymous: false,
    43. },
    44. TagValue: "",
    45. },
    46. {
    47. Value: {},
    48. Field: {
    49. Name: "Pass",
    50. PkgPath: "",
    51. Type: "string",
    52. Tag: "my-tag1:\"pass1\" my-tag2:\"pass2\" params:\"pass\"",
    53. Offset: 24,
    54. Index: [
    55. 2,
    56. ],
    57. Anonymous: false,
    58. },
    59. TagValue: "",
    60. },
    61. ]

TagMapName

  • 说明:TagMapName从参数pointer中检索tag,并以map[string]string的形式返回。

  • 注意:

    • 参数pointer的类型应该是 struct/*struct
    • 只会返回可导出的字段(首字母大写的字段)。
  • 格式:

    1. TagMapName(pointer interface{}, priority []string) (map[string]string, error)
  • 示例:

    1. func main() {
    2. type User struct {
    3. Id int
    4. Name string `params:"name"`
    5. Pass string `my-tag1:"pass1" my-tag2:"pass2" params:"pass"`
    6. }
    7. var user User
    8. m, _ := gstructs.TagMapName(user, []string{"params"})
    9. g.Dump(m)
    10. }
    11. // Output:
    12. {
    13. "name": "Name",
    14. "pass": "Pass",
    15. }