Skip to content
This repository was archived by the owner on Dec 19, 2024. It is now read-only.

Commit 384a719

Browse files
authored
feat: Added type Int, package ints and Improve strs (#13)
1 parent 4dd1113 commit 384a719

13 files changed

Lines changed: 230 additions & 48 deletions

File tree

examples/main.go

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,55 @@
11
package main
22

33
import (
4-
"github.com/go-packagist/support/str"
4+
"github.com/go-packagist/support/ints"
5+
"github.com/go-packagist/support/strs"
56
)
67

78
func main() {
9+
strCase()
10+
intCase()
11+
}
12+
13+
func strCase() {
814
// strings
9-
println(str.InArray("abc", []string{"abc", "def"}))
10-
println(str.Is("ab*", "abc"))
11-
println(str.Md5("abc"))
12-
println(str.Strpos("aabbcc", "a"))
13-
println(str.Strrpos("aabbcc", "a"))
14-
println(str.Strrev("abc"))
15-
println(str.Strtr("aabbcc", "a", "b"))
16-
println(str.StrShuffle("abc"))
17-
println(str.StrPad("abc", 6, " ", str.StrPadLeft))
18-
println(str.Length("张三")) // 2
19-
println(str.Strcut("abc", 0, 1))
20-
println(str.Limit("abc", 1, "..."))
15+
println(strs.InArray("abc", []string{"abc", "def"}))
16+
println(strs.Is("ab*", "abc"))
17+
println(strs.Md5("abc"))
18+
println(strs.Strpos("aabbcc", "a"))
19+
println(strs.Strrpos("aabbcc", "a"))
20+
println(strs.Strrev("abc"))
21+
println(strs.Strtr("aabbcc", "a", "b"))
22+
println(strs.Shuffle("abc"))
23+
println(strs.StrPad("abc", 6, " ", strs.StrPadLeft))
24+
println(strs.Length("张三")) // 2
25+
println(strs.Strcut("abc", 0, 1))
26+
println(strs.Limit("abc", 1, "..."))
2127

2228
// string Atoi
23-
println(str.Atoi("1").Val())
24-
println(str.Atoi("a").Err())
25-
println(str.Atoi("a").IsOk())
29+
println(strs.Atoi("1").Val())
30+
println(strs.Atoi("a").Err())
31+
println(strs.Atoi("a").IsOk())
2632

2733
// Type String
28-
println(str.String("abc").Is("ab*"))
29-
println(str.String("abc").InArray([]string{"abc", "def"}))
30-
println(str.String("abc").Md5())
31-
println(str.String("abc").Sha1())
32-
println(str.String("aabbcc").Strpos("a"))
33-
println(str.String("aabbcc").Strrpos("a"))
34-
println(str.String("abc").Strrev())
35-
println(str.String("aabbcc").Strtr("a", "b"))
36-
println(str.String("abc").StrShuffle())
37-
println(str.String("1").Atoi().Val())
38-
println(str.String("a").Atoi().Err())
39-
println(str.String("a").Atoi().IsOk())
40-
println(str.String("abc").Bytes())
41-
println(str.String("abc").StrPad(6, " ", str.StrPadLeft))
42-
println(str.String("张三").Length()) // 2
43-
println(str.String("abc").Strcut(0, 1))
44-
println(str.String("abc").Limit(1, "..."))
34+
println(strs.String("abc").Is("ab*"))
35+
println(strs.String("abc").InArray([]string{"abc", "def"}))
36+
println(strs.String("abc").Md5())
37+
println(strs.String("abc").Sha1())
38+
println(strs.String("aabbcc").Strpos("a"))
39+
println(strs.String("aabbcc").Strrpos("a"))
40+
println(strs.String("abc").Strrev())
41+
println(strs.String("aabbcc").Strtr("a", "b"))
42+
println(strs.String("abc").Shuffle())
43+
println(strs.String("1").Atoi().Val())
44+
println(strs.String("a").Atoi().Err())
45+
println(strs.String("a").Atoi().IsOk())
46+
println(strs.String("abc").Bytes())
47+
println(strs.String("abc").StrPad(6, " ", strs.StrPadLeft))
48+
println(strs.String("张三").Length()) // 2
49+
println(strs.String("abc").Strcut(0, 1))
50+
println(strs.String("abc").Limit(1, "..."))
51+
}
52+
53+
func intCase() {
54+
ints.InArray(1, []int{1, 2, 3})
4555
}

ints/int.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ints
2+
3+
type Int int
4+
5+
// InArray returns true if the int is in the array.
6+
func (i Int) InArray(arr []int) bool {
7+
return InArray(int(i), arr)
8+
}
9+
10+
// Val returns the int value.
11+
func (i Int) Val() int {
12+
return int(i)
13+
}
14+
15+
// Itoa converts an int to a string.
16+
func (i Int) Itoa() string {
17+
return Itoa(int(i))
18+
}
19+
20+
// String alias for Itoa.
21+
func (i Int) String() string {
22+
return Itoa(int(i))
23+
}
24+
25+
// Bytes returns the bytes of the string.
26+
func (i Int) Bytes() []byte {
27+
return []byte(i.String())
28+
}

ints/int_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package ints
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"testing"
6+
)
7+
8+
func TestInt_InArray(t *testing.T) {
9+
assert.True(t, Int(1).InArray([]int{1, 2, 3}))
10+
assert.False(t, Int(4).InArray([]int{1, 2, 3}))
11+
}
12+
13+
func TestInt_Itoa(t *testing.T) {
14+
assert.Equal(t, "1", Int(1).Itoa())
15+
assert.Equal(t, "2", Int(2).Itoa())
16+
}
17+
18+
func TestInt_String(t *testing.T) {
19+
assert.Equal(t, "1", Int(1).String())
20+
assert.Equal(t, "2", Int(2).String())
21+
}
22+
23+
func TestInt_Bytes(t *testing.T) {
24+
assert.Equal(t, []byte("1"), Int(1).Bytes())
25+
assert.Equal(t, []byte("2"), Int(2).Bytes())
26+
}
27+
28+
func TestInt_Val(t *testing.T) {
29+
assert.Equal(t, 1, Int(1).Val())
30+
assert.Equal(t, 2, Int(2).Val())
31+
}

ints/ints.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package ints
2+
3+
import (
4+
"github.com/go-packagist/support/strs"
5+
"math/rand"
6+
"strconv"
7+
"strings"
8+
)
9+
10+
// InArray returns true if val is in arr.
11+
func InArray(val int, arr []int) bool {
12+
for _, v := range arr {
13+
if v == val {
14+
return true
15+
}
16+
}
17+
18+
return false
19+
}
20+
21+
// Itoa converts an int to a string.
22+
func Itoa(i int) string {
23+
return strconv.Itoa(i)
24+
}
25+
26+
// Split splits a string into an array of ints.
27+
func Split(s, sep string) []int {
28+
split := strings.Split(s, sep)
29+
arr := make([]int, len(split))
30+
31+
for i, v := range split {
32+
arr[i] = strs.Atoi(v).Val()
33+
}
34+
35+
return arr
36+
}
37+
38+
// Random returns a random int between min and max.
39+
func Random(min, max int) int {
40+
return min + rand.Intn(max-min)
41+
}
42+
43+
// RandomString returns a random string of length.
44+
func RandomString(length int) string {
45+
var letters = []rune("0123456789")
46+
47+
b := make([]rune, length)
48+
for i := range b {
49+
b[i] = letters[rand.Intn(len(letters))]
50+
}
51+
52+
return string(b)
53+
}
54+
55+
// Range returns an array of ints between min and max.
56+
func Range(min, max int) []int {
57+
arr := make([]int, max-min+1)
58+
59+
for i := min; i <= max; i++ {
60+
arr[i-min] = i
61+
}
62+
63+
return arr
64+
}

ints/ints_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ints
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"testing"
6+
)
7+
8+
func TestInArray(t *testing.T) {
9+
assert.True(t, InArray(1, []int{1, 2, 3}))
10+
assert.False(t, InArray(4, []int{1, 2, 3}))
11+
}
12+
13+
func TestItoa(t *testing.T) {
14+
assert.Equal(t, "1", Itoa(1))
15+
assert.Equal(t, "2", Itoa(2))
16+
}
17+
18+
func TestSplit(t *testing.T) {
19+
assert.Equal(t, []int{1, 2, 3}, Split("1,2,3", ","))
20+
}
21+
22+
func TestRandom(t *testing.T) {
23+
r1, r2 := Random(1, 1000), Random(1, 1000)
24+
println(r1, r2)
25+
26+
assert.True(t, r1 >= 1 && r1 <= 1000)
27+
assert.True(t, r2 >= 1 && r2 <= 1000)
28+
assert.NotEqual(t, r1, r2)
29+
}
30+
31+
func TestRandomString(t *testing.T) {
32+
s1, s2 := RandomString(10), RandomString(10)
33+
println(s1, s2)
34+
35+
assert.Equal(t, 10, len(s1))
36+
assert.Equal(t, 10, len(s2))
37+
assert.NotEqual(t, s1, s2)
38+
}
39+
40+
func TestRange(t *testing.T) {
41+
assert.Equal(t, []int{1}, Range(1, 1))
42+
assert.Equal(t, []int{1, 2, 3}, Range(1, 3))
43+
assert.Equal(t, []int{1, 2, 3, 4}, Range(1, 4))
44+
}

str/atoi.go renamed to strs/atoi.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package str
1+
package strs
22

33
import "strconv"
44

str/atoi_test.go renamed to strs/atoi_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package str
1+
package strs
22

33
import (
44
"github.com/stretchr/testify/assert"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package str
1+
package strs
22

33
// use `_strings` instead of `strings` to avoid name collision
44
// some functions see https://www.php.net/manual/zh/ref.strings.php

str/string.go renamed to strs/string.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
package str
1+
package strs
22

33
type String string
44

5+
// String returns the string value.
6+
func (s String) Val() string {
7+
return string(s)
8+
}
9+
510
// Is checks if the string matches the pattern.
611
func (s String) Is(pattern string) bool {
712
return Is(pattern, string(s))
@@ -42,9 +47,9 @@ func (s String) Strtr(from, to string) string {
4247
return Strtr(string(s), from, to)
4348
}
4449

45-
// StrShuffle returns a string with the characters in reverse order.
46-
func (s String) StrShuffle() string {
47-
return StrShuffle(string(s))
50+
// Shuffle returns a string with the characters in reverse order.
51+
func (s String) Shuffle() string {
52+
return Shuffle(string(s))
4853
}
4954

5055
// Atoi returns the integer value of a string.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package str
1+
package strs
22

33
import (
44
"github.com/stretchr/testify/assert"

0 commit comments

Comments
 (0)