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