mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-15 02:40:01 +08:00
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:
committed by
GitHub
parent
a2b98dbcf7
commit
130e1ba963
@@ -316,7 +316,7 @@ func toLowerCaseInterface(v any, info *fieldInfo) any {
|
|||||||
case map[string]any:
|
case map[string]any:
|
||||||
return toLowerCaseKeyMap(vv, info)
|
return toLowerCaseKeyMap(vv, info)
|
||||||
case []any:
|
case []any:
|
||||||
var arr []any
|
arr := make([]any, 0, len(vv))
|
||||||
for _, vvv := range vv {
|
for _, vvv := range vv {
|
||||||
arr = append(arr, toLowerCaseInterface(vvv, info))
|
arr = append(arr, toLowerCaseInterface(vvv, info))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ func (c *cluster) getCurrent(key watchKey) []KV {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var kvs []KV
|
kvs := make([]KV, 0, len(watcher.values))
|
||||||
for k, v := range watcher.values {
|
for k, v := range watcher.values {
|
||||||
kvs = append(kvs, KV{
|
kvs = append(kvs, KV{
|
||||||
Key: k,
|
Key: k,
|
||||||
@@ -308,7 +308,7 @@ func (c *cluster) load(cli EtcdClient, key watchKey) int64 {
|
|||||||
time.Sleep(coolDownUnstable.AroundDuration(coolDownInterval))
|
time.Sleep(coolDownUnstable.AroundDuration(coolDownInterval))
|
||||||
}
|
}
|
||||||
|
|
||||||
var kvs []KV
|
kvs := make([]KV, 0, len(resp.Kvs))
|
||||||
for _, ev := range resp.Kvs {
|
for _, ev := range resp.Kvs {
|
||||||
kvs = append(kvs, KV{
|
kvs = append(kvs, KV{
|
||||||
Key: string(ev.Key),
|
Key: string(ev.Key),
|
||||||
@@ -352,7 +352,7 @@ func (c *cluster) reload(cli EtcdClient) {
|
|||||||
// cancel the previous watches
|
// cancel the previous watches
|
||||||
close(c.done)
|
close(c.done)
|
||||||
c.watchGroup.Wait()
|
c.watchGroup.Wait()
|
||||||
var keys []watchKey
|
keys := make([]watchKey, 0, len(c.watchers))
|
||||||
for wk, wval := range c.watchers {
|
for wk, wval := range c.watchers {
|
||||||
keys = append(keys, wk)
|
keys = append(keys, wk)
|
||||||
if wval.cancel != nil {
|
if wval.cancel != nil {
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ func (r *SizeLimitRotateRule) OutdatedFiles() []string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var result []string
|
result := make([]string, 0, len(outdated))
|
||||||
for k := range outdated {
|
for k := range outdated {
|
||||||
result = append(result, k)
|
result = append(result, k)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1944,7 +1944,7 @@ func (s *Redis) ZaddsCtx(ctx context.Context, key string, ps ...Pair) (int64, er
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var zs []red.Z
|
zs := make([]red.Z, 0, len(ps))
|
||||||
for _, p := range ps {
|
for _, p := range ps {
|
||||||
z := red.Z{Score: float64(p.Score), Member: p.Key}
|
z := red.Z{Score: float64(p.Score), Member: p.Key}
|
||||||
zs = append(zs, z)
|
zs = append(zs, z)
|
||||||
|
|||||||
@@ -392,8 +392,8 @@ func (s *sseMcpServer) processListTools(ctx context.Context, client *mcpClient,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var toolsList []Tool
|
|
||||||
s.toolsLock.Lock()
|
s.toolsLock.Lock()
|
||||||
|
toolsList := make([]Tool, 0, len(s.tools))
|
||||||
for _, tool := range s.tools {
|
for _, tool := range s.tools {
|
||||||
if len(tool.InputSchema.Type) == 0 {
|
if len(tool.InputSchema.Type) == 0 {
|
||||||
tool.InputSchema.Type = ContentTypeObject
|
tool.InputSchema.Type = ContentTypeObject
|
||||||
@@ -437,8 +437,8 @@ func (s *sseMcpServer) processListPrompts(ctx context.Context, client *mcpClient
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Prepare prompt list
|
// Prepare prompt list
|
||||||
var promptsList []Prompt
|
|
||||||
s.promptsLock.Lock()
|
s.promptsLock.Lock()
|
||||||
|
promptsList := make([]Prompt, 0, len(s.prompts))
|
||||||
for _, prompt := range s.prompts {
|
for _, prompt := range s.prompts {
|
||||||
promptsList = append(promptsList, prompt)
|
promptsList = append(promptsList, prompt)
|
||||||
}
|
}
|
||||||
@@ -475,8 +475,8 @@ func (s *sseMcpServer) processListResources(ctx context.Context, client *mcpClie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var resourcesList []Resource
|
|
||||||
s.resourcesLock.Lock()
|
s.resourcesLock.Lock()
|
||||||
|
resourcesList := make([]Resource, 0, len(s.resources))
|
||||||
for _, resource := range s.resources {
|
for _, resource := range s.resources {
|
||||||
// Create a copy without the handler function which shouldn't be sent to clients
|
// Create a copy without the handler function which shouldn't be sent to clients
|
||||||
resourceCopy := Resource{
|
resourceCopy := Resource{
|
||||||
|
|||||||
@@ -250,8 +250,9 @@ func extractPositionalParamsFromPath(route spec.Route) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
var params []string
|
tagMembers := ds.GetTagMembers(pathTagKey)
|
||||||
for _, member := range ds.GetTagMembers(pathTagKey) {
|
params := make([]string, 0, len(tagMembers))
|
||||||
|
for _, member := range tagMembers {
|
||||||
dartType := member.Type.Name()
|
dartType := member.Type.Name()
|
||||||
params = append(params, fmt.Sprintf("%s %s", dartType, getPropertyFromMember(member)))
|
params = append(params, fmt.Sprintf("%s %s", dartType, getPropertyFromMember(member)))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,13 +36,13 @@ func genConfig(dir string, cfg *config.Config, api *spec.ApiSpec) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
authNames := getAuths(api)
|
authNames := getAuths(api)
|
||||||
var auths []string
|
auths := make([]string, 0, len(authNames))
|
||||||
for _, item := range authNames {
|
for _, item := range authNames {
|
||||||
auths = append(auths, fmt.Sprintf("%s %s", item, jwtTemplate))
|
auths = append(auths, fmt.Sprintf("%s %s", item, jwtTemplate))
|
||||||
}
|
}
|
||||||
|
|
||||||
jwtTransNames := getJwtTrans(api)
|
jwtTransNames := getJwtTrans(api)
|
||||||
var jwtTransList []string
|
jwtTransList := make([]string, 0, len(jwtTransNames))
|
||||||
for _, item := range jwtTransNames {
|
for _, item := range jwtTransNames {
|
||||||
jwtTransList = append(jwtTransList, fmt.Sprintf("%s %s", item, jwtTransTemplate))
|
jwtTransList = append(jwtTransList, fmt.Sprintf("%s %s", item, jwtTransTemplate))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ func genMain(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func genMainImports(parentPkg string) string {
|
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, configDir)))
|
||||||
imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, handlerDir)))
|
imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, handlerDir)))
|
||||||
imports = append(imports, fmt.Sprintf("\"%s\"\n", pathx.JoinPackages(parentPkg, contextDir)))
|
imports = append(imports, fmt.Sprintf("\"%s\"\n", pathx.JoinPackages(parentPkg, contextDir)))
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ func genTypesWithGroup(dir string, cfg *config.Config, api *spec.ApiSpec) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
for group, typeGroup := range groupTypes {
|
for group, typeGroup := range groupTypes {
|
||||||
var types []spec.Type
|
types := make([]spec.Type, 0, len(typeGroup))
|
||||||
for _, v := range typeGroup {
|
for _, v := range typeGroup {
|
||||||
types = append(types, v)
|
types = append(types, v)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ func (v *ApiVisitor) VisitTypeLit(ctx *api.TypeLitContext) any {
|
|||||||
// VisitTypeBlock implements from api.BaseApiParserVisitor
|
// VisitTypeBlock implements from api.BaseApiParserVisitor
|
||||||
func (v *ApiVisitor) VisitTypeBlock(ctx *api.TypeBlockContext) any {
|
func (v *ApiVisitor) VisitTypeBlock(ctx *api.TypeBlockContext) any {
|
||||||
list := ctx.AllTypeBlockBody()
|
list := ctx.AllTypeBlockBody()
|
||||||
var types []TypeExpr
|
types := make([]TypeExpr, 0, len(list))
|
||||||
for _, each := range list {
|
for _, each := range list {
|
||||||
types = append(types, each.Accept(v).(TypeExpr))
|
types = append(types, each.Accept(v).(TypeExpr))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ func (p parser) fillTypes() error {
|
|||||||
for _, item := range p.ast.Type {
|
for _, item := range p.ast.Type {
|
||||||
switch v := (item).(type) {
|
switch v := (item).(type) {
|
||||||
case *ast.TypeStruct:
|
case *ast.TypeStruct:
|
||||||
var members []spec.Member
|
members := make([]spec.Member, 0, len(v.Fields))
|
||||||
for _, item := range v.Fields {
|
for _, item := range v.Fields {
|
||||||
members = append(members, p.fieldToMember(item))
|
members = append(members, p.fieldToMember(item))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ const (
|
|||||||
var definedKeys = []string{bodyTagKey, formTagKey, pathTagKey, headerTagKey}
|
var definedKeys = []string{bodyTagKey, formTagKey, pathTagKey, headerTagKey}
|
||||||
|
|
||||||
func (s Service) JoinPrefix() Service {
|
func (s Service) JoinPrefix() Service {
|
||||||
var groups []Group
|
groups := make([]Group, 0, len(s.Groups))
|
||||||
for _, g := range s.Groups {
|
for _, g := range s.Groups {
|
||||||
prefix := strings.TrimSpace(g.GetAnnotation(RoutePrefixKey))
|
prefix := strings.TrimSpace(g.GetAnnotation(RoutePrefixKey))
|
||||||
prefix = strings.ReplaceAll(prefix, `"`, "")
|
prefix = strings.ReplaceAll(prefix, `"`, "")
|
||||||
var routes []Route
|
routes := make([]Route, 0, len(g.Routes))
|
||||||
for _, r := range g.Routes {
|
for _, r := range g.Routes {
|
||||||
r.Path = path.Join("/", prefix, r.Path)
|
r.Path = path.Join("/", prefix, r.Path)
|
||||||
routes = append(routes, r)
|
routes = append(routes, r)
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ func (t *Tags) Keys() []string {
|
|||||||
if t == nil {
|
if t == nil {
|
||||||
return []string{}
|
return []string{}
|
||||||
}
|
}
|
||||||
var keys []string
|
keys := make([]string, 0, len(t.tags))
|
||||||
for _, tag := range t.tags {
|
for _, tag := range t.tags {
|
||||||
keys = append(keys, tag.Key)
|
keys = append(keys, tag.Key)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func fillAllStructs(api *spec.ApiSpec) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, group := range api.Service.Groups {
|
for _, group := range api.Service.Groups {
|
||||||
var routes []spec.Route
|
routes := make([]spec.Route, 0, len(group.Routes))
|
||||||
for _, route := range group.Routes {
|
for _, route := range group.Routes {
|
||||||
route.RequestType = fillStruct("", route.RequestType, structTypes)
|
route.RequestType = fillStruct("", route.RequestType, structTypes)
|
||||||
route.ResponseType = fillStruct("", route.ResponseType, 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
|
val.Members = members
|
||||||
return val
|
return val
|
||||||
case spec.NestedStruct:
|
case spec.NestedStruct:
|
||||||
var members []spec.Member
|
members := make([]spec.Member, 0, len(val.Members))
|
||||||
for _, member := range val.Members {
|
for _, member := range val.Members {
|
||||||
switch memberType := member.Type.(type) {
|
switch memberType := member.Type.(type) {
|
||||||
case spec.PointerType:
|
case spec.PointerType:
|
||||||
|
|||||||
@@ -67,11 +67,11 @@ func enumsValueFromOptions(options []string) []any {
|
|||||||
}
|
}
|
||||||
for _, option := range options {
|
for _, option := range options {
|
||||||
if strings.HasPrefix(option, enumFlag) {
|
if strings.HasPrefix(option, enumFlag) {
|
||||||
var resp = make([]any, 0)
|
|
||||||
val := option[8:]
|
val := option[8:]
|
||||||
fields := util.FieldsAndTrimSpace(val, func(r rune) bool {
|
fields := util.FieldsAndTrimSpace(val, func(r rune) bool {
|
||||||
return r == '|'
|
return r == '|'
|
||||||
})
|
})
|
||||||
|
var resp = make([]any, 0, len(fields))
|
||||||
for _, field := range fields {
|
for _, field := range fields {
|
||||||
resp = append(resp, field)
|
resp = append(resp, field)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ func isOptional(_ Context, options []string) bool {
|
|||||||
|
|
||||||
func pathVariable2SwaggerVariable(_ Context, path string) string {
|
func pathVariable2SwaggerVariable(_ Context, path string) string {
|
||||||
pathItems := strings.FieldsFunc(path, slashRune)
|
pathItems := strings.FieldsFunc(path, slashRune)
|
||||||
var resp []string
|
resp := make([]string, 0, len(pathItems))
|
||||||
for _, v := range pathItems {
|
for _, v := range pathItems {
|
||||||
if strings.HasPrefix(v, ":") {
|
if strings.HasPrefix(v, ":") {
|
||||||
resp = append(resp, "{"+v[1:]+"}")
|
resp = append(resp, "{"+v[1:]+"}")
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ func ToUpperCase(r rune) rune {
|
|||||||
|
|
||||||
// ToLower returns a copy string by converting it into lower
|
// ToLower returns a copy string by converting it into lower
|
||||||
func ToLower(s string) string {
|
func ToLower(s string) string {
|
||||||
var out []rune
|
out := make([]rune, 0, len(s))
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
out = append(out, ToLowerCase(r))
|
out = append(out, ToLowerCase(r))
|
||||||
}
|
}
|
||||||
@@ -99,7 +99,7 @@ func ToLower(s string) string {
|
|||||||
|
|
||||||
// ToUpper returns a copy string by converting it into upper
|
// ToUpper returns a copy string by converting it into upper
|
||||||
func ToUpper(s string) string {
|
func ToUpper(s string) string {
|
||||||
var out []rune
|
out := make([]rune, 0, len(s))
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
out = append(out, ToUpperCase(r))
|
out = append(out, ToUpperCase(r))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ func (p pattern) Match(s string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p pattern) list() []string {
|
func (p pattern) list() []string {
|
||||||
var ret []string
|
ret := make([]string, 0, len(p))
|
||||||
for v := range p {
|
for v := range p {
|
||||||
ret = append(ret, v)
|
ret = append(ret, v)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ type Join []string
|
|||||||
|
|
||||||
func genCacheKeys(prefix string, table parser.Table) (Key, []Key) {
|
func genCacheKeys(prefix string, table parser.Table) (Key, []Key) {
|
||||||
var primaryKey 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})
|
primaryKey = genCacheKey(prefix, table.Db, table.Name, []*parser.Field{&table.PrimaryKey.Field})
|
||||||
for _, each := range table.UniqueIndex {
|
for _, each := range table.UniqueIndex {
|
||||||
uniqueKey = append(uniqueKey, genCacheKey(prefix, table.Db, table.Name, each))
|
uniqueKey = append(uniqueKey, genCacheKey(prefix, table.Db, table.Name, each))
|
||||||
|
|||||||
Reference in New Issue
Block a user