What's Changed
feat
- feat: add gf-pr-create skill and refresh root README by @gqcn in #4878
- feat(agents): parallelize gf-pr-review and honor existing comments by @gqcn in #4879
- feat(agents): extend pr review and drop openspec workflow by @gqcn in #4911
- feat(cmd/gf): add gf agents for local coding-agent setup by @gqcn in #4877
- feat(net/ghttp,net/goai): support JSON array request body by the in:"body" field tag by @LanceAdd in #4898
- feat(net/ghttp): add exported HTTP header name constants by @LanceAdd in #4899
fix
- fix: update gf cli to v2.10.3 by @github-actions[bot] in #4867
- fix: v2.10.4 by @hailaz in #4941
- fix(cmd/gf): reimplement GoFmt to avoid go env subprocess per file by @hailaz in #4929
- fix(cmd/gf): avoid duplicate imports when ensuring an existing path by @LanceAdd in #4945
- fix(contrib/drivers/clickhouse): correct conversion, inserts, rewriting by @lingcoder in #4916
- fix(contrib/drivers/dm): preserve quoted identifiers by @yuyinw in #4828
- fix(contrib/drivers/dm): read metadata columns ignoring column name case by @z312193608 in #4875
- fix(contrib/drivers/dm): apply timezone to DM DSN by @014-code in #4904
- fix(contrib/drivers/dm): expand test coverage to the Oracle baseline + 18 driver fixes by @lingcoder in #4925
- fix(contrib/drivers/gaussdb): read int1[] and int16[] arrays back as arrays by @lingcoder in #4896
- fix(contrib/drivers/mssql): expand test coverage to the MySQL baseline + 16 driver fixes by @lingcoder in #4924
- fix(contrib/drivers/oracle): fix GBK decode and quoted identifiers by @yuyinw in #4836
- fix(contrib/drivers/oracle): bring the driver up to the MySQL test baseline by @lingcoder in #4906
- fix(contrib/drivers/pgsql): preserve timetz time zone offsets by @014-code in #4903
- fix(contrib/drivers/sqlite): infer save conflict from primary keys by @gqcn in #4766
- fix(contrib/drivers/sqlite): exclude internal tables from DAO discovery by @allenflux in #4908
- fix(contrib/registry/nacos, contrib/config/nacos): update nacos-sdk-go to 70993e7 by @lingcoder in #4888
- fix(contrib/registry/nacos): add Option pattern for registry configuration by @ShryukGrandhi in #4938
- fix(contrib/registry/zookeeper): keep other instances when registering a service by @taekop in #4907
- fix(database/gdb): map database type names exactly in each driver instead of guessing from substrings by @lingcoder in #4882
- fix(database/gdb): preserve mixed values in undeclared columns by @allenflux in #4905
- fix(database/gdb): cache forced empty results by @sean0407 in #4919
- fix(database/gdb): treat empty TxOptions.Propagation as the default by @somaz94 in #4926
- fix(net/gclient): remove dead request body read in tracing tracer by @LanceAdd in #4900
- fix(net/ghttp): avoid the nil serving handler panic on the request struct parsing by @LanceAdd in #4901
- fix(net/ghttp): avoid nil serveHandler panic on unmatched route parsing by @LanceAdd in #4912
- fix(net/ghttp): strip the whole :name part when comparing router priority by @LuisFigueroaG in #4917
- fix(net/ghttp): pin default Swagger UI Redoc to v2.5.3 by @xuanwolei in #4922
- fix(net/ghttp): guard preBindItems against concurrent server starts by @somaz94 in #4927
- fix(net/ghttp): bind all values of repeated query keys to slice fields,like PHP does by @LuisFigueroaG in #4928
- fix(net/ghttp,net/goai,util/gtag): replace in:"body" with body:"*" for the whole request body by @LanceAdd in #4932
- fix(os/gcfg): recover file watchers after load errors by @014-code in #4923
- fix(os/gfpool): reopen pooled file when its path points to another file by @ShryukGrandhi in #4934
- fix(os/gproc): restore default signal handling when shutdown listenin… by @jiang-bx in #4868
- fix(os/gsession): publish atomic file snapshots on Unix by @allenflux in #4910
- fix(redis): pin dedicated connection in Conn for connection-stateful commands by @yangfei1024 in #4864
- fix(text/gstr): update StrTill function to return correct substring length and add unit tests by @hailaz in #4873
- fix(util/gconv): preserve timezone when converting typed time values by @hailaz in #4845
- fix(util/grand): keep the closed duration interval by @salapenar-max in #4915
- fix(util/gvalid): measure a container by its element count in length … by @jiang-bx in #4865
perf
- perf(internal/instance,i18n/gi18n,os/gcfg,database/gdb): check the cached instance with a reading lock by @LanceAdd in #4902
- perf(net/ghttp): skip unused request tag handling by @LanceAdd in #4889
- perf(util/gvalid): speed up struct validation by @LanceAdd in #4886
refactor
- refactor(cmd/gf,contrib/drivers,net/ghttp,database/gdb,os/glog,net/goai,os/gtime): use constants by @LanceAdd in #4931
- refactor(net/gclient): split prepareRequest into focused helper functions by @LanceAdd in #4890
test
- test(contrib/drivers/oceanbase): expand test coverage to the MySQL baseline by @lingcoder in #4894
- test(contrib/drivers/sqlite): take the colon of the path from the drive letter on Windows by @lingcoder in #4885
- test(contrib/drivers/sqlite): expand test coverage to the MySQL baseline + 2 driver fixes by @lingcoder in #4892
- test(contrib/drivers/sqlite): assert Test_DB_Ctx timeout via the context instead of the error text by @lingcoder in #4918
- test(contrib/drivers/sqlitecgo): expand test coverage to the MySQL baseline + 3 driver fixes by @lingcoder in #4897
- test(contrib/drivers/tidb): expand test coverage to the MySQL baseline by @lingcoder in #4893
New Contributors
- @z312193608 made their first contribution in #4875
- @yuyinw made their first contribution in #4828
- @allenflux made their first contribution in #4905
- @014-code made their first contribution in #4904
- @taekop made their first contribution in #4907
- @yangfei1024 made their first contribution in #4864
- @salapenar-max made their first contribution in #4915
- @xuanwolei made their first contribution in #4922
- @LuisFigueroaG made their first contribution in #4917
- @somaz94 made their first contribution in #4927
- @sean0407 made their first contribution in #4919
- @ShryukGrandhi made their first contribution in #4938
Full Changelog: v2.10.3...v2.10.4