基本介绍

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. }