mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-07 15:10:01 +08:00
Optimize slicing operations (#4877)
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user