perf: pre-allocate all known length arrays to avoid re-scaling (#5029)

Co-authored-by: Kevin Wan <wanjunfeng@gmail.com>
This commit is contained in:
Ioannis Pinakoulakis
2025-08-08 19:03:25 +03:00
committed by GitHub
parent a2b98dbcf7
commit 130e1ba963
19 changed files with 29 additions and 28 deletions

View File

@@ -250,8 +250,9 @@ func extractPositionalParamsFromPath(route spec.Route) string {
return ""
}
var params []string
for _, member := range ds.GetTagMembers(pathTagKey) {
tagMembers := ds.GetTagMembers(pathTagKey)
params := make([]string, 0, len(tagMembers))
for _, member := range tagMembers {
dartType := member.Type.Name()
params = append(params, fmt.Sprintf("%s %s", dartType, getPropertyFromMember(member)))
}

View File

@@ -36,13 +36,13 @@ func genConfig(dir string, cfg *config.Config, api *spec.ApiSpec) error {
}
authNames := getAuths(api)
var auths []string
auths := make([]string, 0, len(authNames))
for _, item := range authNames {
auths = append(auths, fmt.Sprintf("%s %s", item, jwtTemplate))
}
jwtTransNames := getJwtTrans(api)
var jwtTransList []string
jwtTransList := make([]string, 0, len(jwtTransNames))
for _, item := range jwtTransNames {
jwtTransList = append(jwtTransList, fmt.Sprintf("%s %s", item, jwtTransTemplate))
}

View File

@@ -43,7 +43,7 @@ func genMain(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
}
func genMainImports(parentPkg string) string {
var imports []string
imports := make([]string, 0, 5)
imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, configDir)))
imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, handlerDir)))
imports = append(imports, fmt.Sprintf("\"%s\"\n", pathx.JoinPackages(parentPkg, contextDir)))

View File

@@ -154,7 +154,7 @@ func genTypesWithGroup(dir string, cfg *config.Config, api *spec.ApiSpec) error
}
for group, typeGroup := range groupTypes {
var types []spec.Type
types := make([]spec.Type, 0, len(typeGroup))
for _, v := range typeGroup {
types = append(types, v)
}

View File

@@ -126,7 +126,7 @@ func (v *ApiVisitor) VisitTypeLit(ctx *api.TypeLitContext) any {
// VisitTypeBlock implements from api.BaseApiParserVisitor
func (v *ApiVisitor) VisitTypeBlock(ctx *api.TypeBlockContext) any {
list := ctx.AllTypeBlockBody()
var types []TypeExpr
types := make([]TypeExpr, 0, len(list))
for _, each := range list {
types = append(types, each.Accept(v).(TypeExpr))
}

View File

@@ -125,7 +125,7 @@ func (p parser) fillTypes() error {
for _, item := range p.ast.Type {
switch v := (item).(type) {
case *ast.TypeStruct:
var members []spec.Member
members := make([]spec.Member, 0, len(v.Fields))
for _, item := range v.Fields {
members = append(members, p.fieldToMember(item))
}

View File

@@ -20,11 +20,11 @@ const (
var definedKeys = []string{bodyTagKey, formTagKey, pathTagKey, headerTagKey}
func (s Service) JoinPrefix() Service {
var groups []Group
groups := make([]Group, 0, len(s.Groups))
for _, g := range s.Groups {
prefix := strings.TrimSpace(g.GetAnnotation(RoutePrefixKey))
prefix = strings.ReplaceAll(prefix, `"`, "")
var routes []Route
routes := make([]Route, 0, len(g.Routes))
for _, r := range g.Routes {
r.Path = path.Join("/", prefix, r.Path)
routes = append(routes, r)

View File

@@ -66,7 +66,7 @@ func (t *Tags) Keys() []string {
if t == nil {
return []string{}
}
var keys []string
keys := make([]string, 0, len(t.tags))
for _, tag := range t.tags {
keys = append(keys, tag.Key)
}

View File

@@ -19,7 +19,7 @@ func fillAllStructs(api *spec.ApiSpec) {
}
for _, group := range api.Service.Groups {
var routes []spec.Route
routes := make([]spec.Route, 0, len(group.Routes))
for _, route := range group.Routes {
route.RequestType = fillStruct("", route.RequestType, structTypes)
route.ResponseType = fillStruct("", route.ResponseType, structTypes)
@@ -74,7 +74,7 @@ func fillStruct(parent string, tp spec.Type, allTypes map[string]spec.DefineStru
val.Members = members
return val
case spec.NestedStruct:
var members []spec.Member
members := make([]spec.Member, 0, len(val.Members))
for _, member := range val.Members {
switch memberType := member.Type.(type) {
case spec.PointerType:

View File

@@ -67,11 +67,11 @@ func enumsValueFromOptions(options []string) []any {
}
for _, option := range options {
if strings.HasPrefix(option, enumFlag) {
var resp = make([]any, 0)
val := option[8:]
fields := util.FieldsAndTrimSpace(val, func(r rune) bool {
return r == '|'
})
var resp = make([]any, 0, len(fields))
for _, field := range fields {
resp = append(resp, field)
}

View File

@@ -244,7 +244,7 @@ func isOptional(_ Context, options []string) bool {
func pathVariable2SwaggerVariable(_ Context, path string) string {
pathItems := strings.FieldsFunc(path, slashRune)
var resp []string
resp := make([]string, 0, len(pathItems))
for _, v := range pathItems {
if strings.HasPrefix(v, ":") {
resp = append(resp, "{"+v[1:]+"}")

View File

@@ -90,7 +90,7 @@ func ToUpperCase(r rune) rune {
// ToLower returns a copy string by converting it into lower
func ToLower(s string) string {
var out []rune
out := make([]rune, 0, len(s))
for _, r := range s {
out = append(out, ToLowerCase(r))
}
@@ -99,7 +99,7 @@ func ToLower(s string) string {
// ToUpper returns a copy string by converting it into upper
func ToUpper(s string) string {
var out []rune
out := make([]rune, 0, len(s))
for _, r := range s {
out = append(out, ToUpperCase(r))
}