Optimize slicing operations (#4877)

This commit is contained in:
me-cs
2025-05-20 19:36:02 +08:00
committed by GitHub
parent a682bda0bb
commit 4d3681b71c
4 changed files with 138 additions and 10 deletions

View File

@@ -8,10 +8,10 @@ import (
"fmt" "fmt"
"io" "io"
"path" "path"
"slices"
"strings" "strings"
"text/template" "text/template"
"github.com/zeromicro/go-zero/core/stringx"
"github.com/zeromicro/go-zero/tools/goctl/api/spec" "github.com/zeromicro/go-zero/tools/goctl/api/spec"
apiutil "github.com/zeromicro/go-zero/tools/goctl/api/util" apiutil "github.com/zeromicro/go-zero/tools/goctl/api/util"
"github.com/zeromicro/go-zero/tools/goctl/internal/version" "github.com/zeromicro/go-zero/tools/goctl/internal/version"
@@ -96,13 +96,13 @@ func (c *componentsContext) createComponent(dir, packetName string, ty spec.Type
for _, item := range c.responseTypes { for _, item := range c.responseTypes {
if item.Name() == defineStruct.Name() { if item.Name() == defineStruct.Name() {
superClassName = "HttpResponseData" superClassName = "HttpResponseData"
if !stringx.Contains(c.imports, httpResponseData) { if !slices.Contains(c.imports, httpResponseData) {
c.imports = append(c.imports, httpResponseData) c.imports = append(c.imports, httpResponseData)
} }
break break
} }
} }
if superClassName == "HttpData" && !stringx.Contains(c.imports, httpData) { if superClassName == "HttpData" && !slices.Contains(c.imports, httpData) {
c.imports = append(c.imports, httpData) c.imports = append(c.imports, httpData)
} }
@@ -266,7 +266,7 @@ func (c *componentsContext) genGetSet(writer io.Writer, indent int) error {
tyString := javaType tyString := javaType
decorator := "" decorator := ""
javaPrimitiveType := []string{"int", "long", "boolean", "float", "double", "short"} javaPrimitiveType := []string{"int", "long", "boolean", "float", "double", "short"}
if !stringx.Contains(javaPrimitiveType, javaType) { if !slices.Contains(javaPrimitiveType, javaType) {
if member.IsOptional() || member.IsOmitEmpty() { if member.IsOptional() || member.IsOmitEmpty() {
decorator = "@Nullable " decorator = "@Nullable "
} else { } else {

View File

@@ -3,9 +3,9 @@ package spec
import ( import (
"errors" "errors"
"path" "path"
"slices"
"strings" "strings"
"github.com/zeromicro/go-zero/core/stringx"
"github.com/zeromicro/go-zero/tools/goctl/util" "github.com/zeromicro/go-zero/tools/goctl/util"
) )
@@ -64,7 +64,7 @@ func (m Member) IsOptional() bool {
tag := m.Tags() tag := m.Tags()
for _, item := range tag { for _, item := range tag {
if item.Key == bodyTagKey || item.Key == formTagKey { if item.Key == bodyTagKey || item.Key == formTagKey {
if stringx.Contains(item.Options, "optional") { if slices.Contains(item.Options, "optional") {
return true return true
} }
} }
@@ -81,7 +81,7 @@ func (m Member) IsOmitEmpty() bool {
tag := m.Tags() tag := m.Tags()
for _, item := range tag { for _, item := range tag {
if item.Key == bodyTagKey { if item.Key == bodyTagKey {
if stringx.Contains(item.Options, "omitempty") { if slices.Contains(item.Options, "omitempty") {
return true return true
} }
} }
@@ -93,7 +93,7 @@ func (m Member) IsOmitEmpty() bool {
func (m Member) GetPropertyName() (string, error) { func (m Member) GetPropertyName() (string, error) {
tags := m.Tags() tags := m.Tags()
for _, tag := range tags { for _, tag := range tags {
if stringx.Contains(definedKeys, tag.Key) { if slices.Contains(definedKeys, tag.Key) {
if tag.Name == "-" { if tag.Name == "-" {
return util.Untitle(m.Name), nil return util.Untitle(m.Name), nil
} }

View File

@@ -4,9 +4,9 @@ import (
"errors" "errors"
"fmt" "fmt"
"os" "os"
"slices"
"time" "time"
"github.com/zeromicro/go-zero/core/stringx"
"github.com/zeromicro/go-zero/tools/goctl/rpc/execx" "github.com/zeromicro/go-zero/tools/goctl/rpc/execx"
"github.com/zeromicro/go-zero/tools/goctl/util/console" "github.com/zeromicro/go-zero/tools/goctl/util/console"
"github.com/zeromicro/go-zero/tools/goctl/util/ctx" "github.com/zeromicro/go-zero/tools/goctl/util/ctx"
@@ -37,7 +37,7 @@ func editMod(version string, verbose bool) error {
return err return err
} }
if !stringx.Contains(latest, version) { if !slices.Contains(latest, version) {
return fmt.Errorf("release version %q is not found", version) return fmt.Errorf("release version %q is not found", version)
} }

View File

@@ -192,3 +192,131 @@ func TestUntitle(t *testing.T) {
assert.Equal(t, c.want, ret) assert.Equal(t, c.want, ret)
} }
} }
func TestContainsAny(t *testing.T) {
type args struct {
s string
runes []rune
}
tests := []struct {
name string
args args
want bool
}{
{
name: "runes is empty",
args: args{
s: "test",
runes: []rune{},
},
want: true,
},
{
name: "s is empty and runes is not empty",
args: args{
s: "",
runes: []rune{'a', 'b', 'c'},
},
want: false,
},
{
name: "s contains runes",
args: args{
s: "hello",
runes: []rune{'e', 'f'},
},
want: true,
},
{
name: "s does not contain runes",
args: args{
s: "hello",
runes: []rune{'x', 'y'},
},
want: false,
},
{
name: "s and runes both have one matching character",
args: args{
s: "a",
runes: []rune{'a'},
},
want: true,
},
{
name: "s and runes both have one non-matching character",
args: args{
s: "a",
runes: []rune{'b'},
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equalf(t, tt.want, ContainsAny(tt.args.s, tt.args.runes...), "ContainsAny(%v, %v)", tt.args.s, tt.args.runes)
})
}
}
func TestContainsWhiteSpace(t *testing.T) {
type args struct {
s string
}
tests := []struct {
name string
args args
want bool
}{
{
name: "contains space",
args: args{s: "hello world"},
want: true,
},
{
name: "contains newline",
args: args{s: "hello\nworld"},
want: true,
},
{
name: "contains tab",
args: args{s: "hello\tworld"},
want: true,
},
{
name: "contains form feed",
args: args{s: "hello\fworld"},
want: true,
},
{
name: "contains vertical tab",
args: args{s: "hello\vworld"},
want: true,
},
{
name: "no whitespace",
args: args{s: "helloworld"},
want: false,
},
{
name: "empty string",
args: args{s: ""},
want: false,
},
{
name: "only whitespace",
args: args{s: " \t\n\f\v"},
want: true,
},
{
name: "contains non-standard whitespace",
args: args{s: "hello\u00A0world"},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equalf(t, tt.want, ContainsWhiteSpace(tt.args.s), "ContainsWhiteSpace(%v)", tt.args.s)
})
}
}