mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-12-22 10:08:15 -05:00
use strings.Builder
This commit is contained in:
parent
9a4624b833
commit
122c3e7a5d
@ -4,6 +4,7 @@ package errors // import "v2ray.com/core/common/errors"
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"v2ray.com/core/common/log"
|
"v2ray.com/core/common/log"
|
||||||
"v2ray.com/core/common/serial"
|
"v2ray.com/core/common/serial"
|
||||||
@ -41,21 +42,28 @@ func (err *Error) pkgPath() string {
|
|||||||
|
|
||||||
// Error implements error.Error().
|
// Error implements error.Error().
|
||||||
func (v *Error) Error() string {
|
func (v *Error) Error() string {
|
||||||
msg := serial.Concat(v.message...)
|
builder := strings.Builder{}
|
||||||
if v.inner != nil {
|
for _, prefix := range v.prefix {
|
||||||
msg += " > " + v.inner.Error()
|
builder.WriteByte('[')
|
||||||
|
builder.WriteString(serial.ToString(prefix))
|
||||||
|
builder.WriteString("] ")
|
||||||
}
|
}
|
||||||
|
|
||||||
path := v.pkgPath()
|
path := v.pkgPath()
|
||||||
if len(path) > 0 {
|
if len(path) > 0 {
|
||||||
msg = path + ": " + msg
|
builder.WriteString(path)
|
||||||
|
builder.WriteString(": ")
|
||||||
}
|
}
|
||||||
|
|
||||||
var prefix string
|
msg := serial.Concat(v.message...)
|
||||||
for _, p := range v.prefix {
|
builder.WriteString(msg)
|
||||||
prefix += "[" + serial.ToString(p) + "] "
|
|
||||||
|
if v.inner != nil {
|
||||||
|
builder.WriteString(" > ")
|
||||||
|
builder.WriteString(v.inner.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return prefix + msg
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inner implements hasInnerError.Inner()
|
// Inner implements hasInnerError.Inner()
|
||||||
|
@ -28,11 +28,11 @@ func ToString(v interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Concat(v ...interface{}) string {
|
func Concat(v ...interface{}) string {
|
||||||
values := make([]string, len(v))
|
builder := strings.Builder{}
|
||||||
for i, value := range v {
|
for _, value := range v {
|
||||||
values[i] = ToString(value)
|
builder.WriteString(ToString(value))
|
||||||
}
|
}
|
||||||
return strings.Join(values, "")
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func WriteString(s string) func([]byte) (int, error) {
|
func WriteString(s string) func([]byte) (int, error) {
|
||||||
|
@ -26,3 +26,33 @@ func TestToString(t *testing.T) {
|
|||||||
assert(ToString(c.Value), Equals, c.String)
|
assert(ToString(c.Value), Equals, c.String)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConcat(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
Input []interface{}
|
||||||
|
Output string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
Input: []interface{}{
|
||||||
|
"a", "b",
|
||||||
|
},
|
||||||
|
Output: "ab",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, testCase := range testCases {
|
||||||
|
actual := Concat(testCase.Input...)
|
||||||
|
if actual != testCase.Output {
|
||||||
|
t.Error("Unexpected output: ", actual, " but want: ", testCase.Output)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkConcat(b *testing.B) {
|
||||||
|
input := []interface{}{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}
|
||||||
|
|
||||||
|
b.ReportAllocs()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
_ = Concat(input...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user