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

@@ -316,7 +316,7 @@ func toLowerCaseInterface(v any, info *fieldInfo) any {
case map[string]any:
return toLowerCaseKeyMap(vv, info)
case []any:
var arr []any
arr := make([]any, 0, len(vv))
for _, vvv := range vv {
arr = append(arr, toLowerCaseInterface(vvv, info))
}

View File

@@ -207,7 +207,7 @@ func (c *cluster) getCurrent(key watchKey) []KV {
return nil
}
var kvs []KV
kvs := make([]KV, 0, len(watcher.values))
for k, v := range watcher.values {
kvs = append(kvs, KV{
Key: k,
@@ -308,7 +308,7 @@ func (c *cluster) load(cli EtcdClient, key watchKey) int64 {
time.Sleep(coolDownUnstable.AroundDuration(coolDownInterval))
}
var kvs []KV
kvs := make([]KV, 0, len(resp.Kvs))
for _, ev := range resp.Kvs {
kvs = append(kvs, KV{
Key: string(ev.Key),
@@ -352,7 +352,7 @@ func (c *cluster) reload(cli EtcdClient) {
// cancel the previous watches
close(c.done)
c.watchGroup.Wait()
var keys []watchKey
keys := make([]watchKey, 0, len(c.watchers))
for wk, wval := range c.watchers {
keys = append(keys, wk)
if wval.cancel != nil {

View File

@@ -211,7 +211,7 @@ func (r *SizeLimitRotateRule) OutdatedFiles() []string {
}
}
var result []string
result := make([]string, 0, len(outdated))
for k := range outdated {
result = append(result, k)
}

View File

@@ -1944,7 +1944,7 @@ func (s *Redis) ZaddsCtx(ctx context.Context, key string, ps ...Pair) (int64, er
return 0, err
}
var zs []red.Z
zs := make([]red.Z, 0, len(ps))
for _, p := range ps {
z := red.Z{Score: float64(p.Score), Member: p.Key}
zs = append(zs, z)

View File

@@ -392,8 +392,8 @@ func (s *sseMcpServer) processListTools(ctx context.Context, client *mcpClient,
}
}
var toolsList []Tool
s.toolsLock.Lock()
toolsList := make([]Tool, 0, len(s.tools))
for _, tool := range s.tools {
if len(tool.InputSchema.Type) == 0 {
tool.InputSchema.Type = ContentTypeObject
@@ -437,8 +437,8 @@ func (s *sseMcpServer) processListPrompts(ctx context.Context, client *mcpClient
}
// Prepare prompt list
var promptsList []Prompt
s.promptsLock.Lock()
promptsList := make([]Prompt, 0, len(s.prompts))
for _, prompt := range s.prompts {
promptsList = append(promptsList, prompt)
}
@@ -475,8 +475,8 @@ func (s *sseMcpServer) processListResources(ctx context.Context, client *mcpClie
}
}
var resourcesList []Resource
s.resourcesLock.Lock()
resourcesList := make([]Resource, 0, len(s.resources))
for _, resource := range s.resources {
// Create a copy without the handler function which shouldn't be sent to clients
resourceCopy := Resource{

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))
}

View File

@@ -172,7 +172,7 @@ func (p pattern) Match(s string) bool {
}
func (p pattern) list() []string {
var ret []string
ret := make([]string, 0, len(p))
for v := range p {
ret = append(ret, v)
}

View File

@@ -39,7 +39,7 @@ type Join []string
func genCacheKeys(prefix string, table parser.Table) (Key, []Key) {
var primaryKey Key
var uniqueKey []Key
uniqueKey := make([]Key, 0, len(table.UniqueIndex))
primaryKey = genCacheKey(prefix, table.Db, table.Name, []*parser.Field{&table.PrimaryKey.Field})
for _, each := range table.UniqueIndex {
uniqueKey = append(uniqueKey, genCacheKey(prefix, table.Db, table.Name, each))