github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/bean/README.md (about)

     1  ## bean
     2  对象进行管理
     3  
     4  功能:
     5  - 统一管理对象
     6  - 动态的查看对应对象的属性
     7  - 动态的调用对应对象的方法
     8  
     9  场景:适合非业务开发的工具中,比如线上调试工具
    10  
    11  ### api
    12  ```go
    13  // 注册对象;注意:对象只可为指针类型
    14  func AddBean(beanName string, beanPtr any) {}
    15  
    16  // 对象存在否
    17  func ExistBean(beanName string) bool {}
    18  
    19  // 获取对象
    20  func GetBean(beanName string) any {}
    21  
    22  // 获取对象key
    23  func GetBeanNames(beanName string) []string {}
    24  
    25  // 查看:对象属性值
    26  func GetField(beanName, fieldName string) any {}
    27  
    28  // 修改:对象属性值
    29  func SetField(beanName, fieldName string) any {}
    30  
    31  // 执行对象的函数
    32  func CallFun(beanName, methodName string, parameterValueMap map[string]any) []any {}
    33  ```
    34  
    35  ### 示例
    36  ```go
    37  func TestAddBean(t *testing.T) {
    38      tt := TestEntity{Name: "hello", Age: 12}
    39      // 注册
    40      bean.AddBean("test", &tt)
    41  
    42      // 获取bean
    43      t1 := bean.GetBean("test")
    44      t2 := t1.(*TestEntity)
    45      assert.Equal(t, t2.Name, tt.Name)
    46  }
    47  
    48  func TestGetFieldShow(t *testing.T) {
    49      tt := TestEntity{Name: "value"}
    50      // 添加注册
    51      bean.AddBean("test", &tt)
    52  
    53      // 获取值
    54      actValue := bean.GetField("test", "Name")
    55      assert.Equal(t, actValue, "value")
    56  
    57      // 修改值
    58      bean.SetField("test", "Name", "value-change")
    59  
    60      // 查看
    61      actValue = bean.GetField("test", "Name")
    62      assert.Equal(t, actValue, "value-change")
    63  }
    64  
    65  func TestCallFun1(t *testing.T) {
    66      tt := TestEntity{}
    67  
    68      // 添加bean
    69      bean.AddBean("test", &tt)
    70  
    71      parameterMap := map[string]any{}
    72      // 说明:参数map中的key只可为p1、p2、p3...,用于表示参数的顺序
    73      aparameterMap["p1"] = "name"
    74  
    75      // 函数调用
    76      fv := bean.CallFun("test", "Fun1", parameterMap)
    77      assert.Equal(t, isc.ToString(fv[0]), "name")
    78  }
    79  ```
    80  
    81  ### 在线管理bean功能
    82  在运行中如果出现问题,需要查看某个对象的属性和函数的时候,就可以使用该功能,进行动态的查看、修改对应属性,以及动态的执行对应的函数
    83  
    84  ```yaml
    85  base:
    86    endpoint:
    87      # 是否启用bean的端点,默认false
    88      bean:
    89        enable: true
    90  ```
    91  
    92  ```shell
    93  # 获取注册的所有bean
    94  curl http://localhost:xxx/{api-prefix}/{api-module}/bean/name/all'
    95  # 查询注册的某些bean 
    96  curl http://localhost:xxx/{api-prefix}/{api-module}/bean/name/list/:name'
    97  # 查询某个bean的属性值
    98  curl -X POST http://localhost:xxx/{api-prefix}/{api-module}/bean/field/get' -d '{"bean": "xx", "field": "xxx"}'
    99  # 修改某个bean的属性的值(暂时只支持基本类型)
   100  curl -X PUT http://localhost:xxx/{api-prefix}/{api-module}/bean/field/set' -d '{"bean": "xx", "field": "xxx", "value": "xxx"}'
   101  # 调用bean的某个函数(参数暂时只支持基本类型)
   102  curl -X POST http://localhost:xxx/{api-prefix}/{api-module}/bean/fun/call' -d '{"bean": "xx", "fun": "xxx", "parameter": {"p1":"xx", "p2": "xxx"}}'
   103  ```
   104  
   105  提示:<br/>
   106  - 调用bean函数中,parameter的对应的map中的key只能是p1、p2、p3...这种表示的是第一个、第二个、第三个参数的值
   107  - 调用bean函数中,参数值暂时只适用于基本结构,对于实体类或者map类的暂时不支持,后续可以考虑支持
   108  
   109