wln32

Results 43 comments of wln32

@gqcn ,找不到子命令时,应将其视为参数,不应该报错 ![image](https://github.com/user-attachments/assets/69a40c9b-d85d-452e-a19d-4944d381ff57)

> 可以将GO的原生泛支持考虑进去。在某些场景下,可以提高性能与开发便携性。如我们的gdb.Counter为了兼容,现在value是 float64,若用泛型,该是int就是int。对于某些库方法,在使用了泛型后,也可以不需要再使用any或gvar.Var去处理,可以提升性能。若需要考虑与原来的兼容性,可以考虑另加一套对泛型的支持。 > > 说个易用的点,比如sync.Map,若用了泛型进行封装后,我们就可以声明 gsync.Map[T1,T2]了,用起来会简单很多,也不用再每次取值时断言,减少出错率。 现在go泛型是残缺的,不支持方法,用起来很别扭

> 1. 强化`规范路由`的要求,不应该由框架自行尝试解析没有明确标注参数类型和位置的参数(path/query/header/body parameter),应该强制要求开发者在tag中指定参数位置 > 2. 强化 `gclient`对`规范路由`标准支持 赞同

@806572349 @gqcn 在2.8.3中,&parent.Children和&roots[0].Children两者地址一致,你在向parent.Children中添加时,其实就是在向roots[0].Children添加,2.9.0,两者地址不一致,所以在parent.Children中添加,roots[0].Children并不会更新,具体可以运行代码,看BuildMenuTree函数里面的打印即可

@gqcn 应在文档或注释中说明当类型相同时,转换的逻辑,根据目前支持的参数类型,可以分为以下 src可以取struct,\*struct dst可以取\*struct,**struct 可以得到以下几种组合 1. src=struct, dst=*struct 2. src=struct, dst=**struct 3. src=*struct, dst=*struct 4. src=*struct, dst=**struct 第1 2种情况只能是值赋值,修改dst时,不会影响src,所以children=nil 第3种情况由于要设置dst,所以用的时候会调用dst.Elem(),dst=struct,src需要匹配dst的类型,也会变成struct,所以children=nil 第4种情况,dst.Elem()之后,dst仍然是*struct,刚好和src类型匹配,相当于直接把指针赋值给dst,对dst做的影响都会影响到src 所以children !=nil 综上,前3种情况的转换,children=nil,只有第4种children!=nil 注: 以上所说情况在2.8.3版本中,2.9.0中4种情况都是children=nil 还有,也需要补充对于字段类型相同时,如果是指针类型,需说明是值赋值,还是指针赋值

@hailaz @gqcn 是否需要给ghttp定义一个单独的converter?

> > @hailaz @gqcn 是否需要给ghttp定义一个单独的converter? > > 我不知道,我改这个的时候绕了很久,也不知道这样解决是否合理。 本来想在converter里面处理的,但是类型一引用就导致包循环引用了。 可以像orm那样,给ghttp包单独定义一个converter,不和gconv中的共享,可以把ghttp包中目前所有用到gconv的地方,都替换为ghttp中自定义的converter,issue #2913 中提到,目前ghttp对于参数转换错误的,直接返回了默认值,没有返回错误

@StrangeYear ```go exchangeRate := make(ExchangeRate) // ExchangeRate 类型的定义是什么? ```

@StrangeYear 暂时先用结构体代替吧,目前还不支持这种map套map的转换 ```go type ExchangeRate struct { USD map[string]any } ```

@runsong2018 排查过后发现是logger的文件名发生了改变,并不是缓存替换了,这块的逻辑目前有bug, 可以使用代码验证 ```go type HelloReq struct { g.Meta `path:"/hello/{index}" tags:"Hello" method:"get" summary:"You first hello api"` Index int `json:"index"` } func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err...