大家好,我是碼農先森。
從 PHP 轉到 Go 的朋友,常常會因為沒有便捷的工具函式而感到苦惱。PHP 寫的多了就會形成路徑依賴,在寫 Go 的時候時不時就會想到 PHP 強大的陣列函式。當然寫 Go 的 PHPer 也想擁有這麼強大的工具函式,在這個開源的程式設計世界總有一些偉大的程式設計師做著貢獻,正是有了他們的存在,因此便有了 lancet 這樣一個強大的 Go 語言工具函式庫,下面我介紹一些常用的工具函式「文末附上了手冊地址」。
ContainChinese
驗證字串是否包含中文字元。
import (
"fmt"
"github.com/duke-git/lancet/v2/validator"
)
func main() {
result1 := validator.ContainChinese("你好")
result2 := validator.ContainChinese("你好hello")
result3 := validator.ContainChinese("hello")
fmt.Println(result1)
fmt.Println(result2)
fmt.Println(result3)
// Output:
// true
// true
// false
}
IsChineseMobile
驗證字串是否是中國手機號碼。
import (
"fmt"
"github.com/duke-git/lancet/v2/validator"
)
func main() {
result1 := validator.IsChineseMobile("13263527980")
result2 := validator.IsChineseMobile("434324324")
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
IsChineseIdNum
驗證字串是否是中國身份證號碼。
import (
"fmt"
"github.com/duke-git/lancet/v2/validator"
)
func main() {
result1 := validator.IsChineseIdNum("210911192105130715")
result2 := validator.IsChineseIdNum("123456")
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
IsChinesePhone
驗證字串是否是中國電話座機號碼。
import (
"fmt"
"github.com/duke-git/lancet/v2/validator"
)
func main() {
result1 := validator.IsChinesePhone("010-32116675")
result2 := validator.IsChinesePhone("123-87562")
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
IsCreditCard
驗證字串是否是信用卡號碼。
import (
"fmt"
"github.com/duke-git/lancet/v2/validator"
)
func main() {
result1 := validator.IsCreditCard("4111111111111111")
result2 := validator.IsCreditCard("123456")
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
IsEmail
驗證字串是否是有效電子郵件地址。
import (
"fmt"
"github.com/duke-git/lancet/v2/validator"
)
func main() {
result1 := validator.IsEmail("abc@xyz.com")
result2 := validator.IsEmail("a.b@@com")
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
Contain
判斷 slice 是否包含 value。
import (
"fmt"
"github.com/duke-git/lancet/v2/slice"
)
func main() {
result1 := slice.Contain([]string{"a", "b", "c"}, "a")
result2 := slice.Contain([]int{1, 2, 3}, 4)
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
Chunk
按照 size 引數均分 slice。
import (
"fmt"
"github.com/duke-git/lancet/v2/slice"
)
func main() {
arr := []string{"a", "b", "c", "d", "e"}
result1 := slice.Chunk(arr, 1)
result2 := slice.Chunk(arr, 2)
fmt.Println(result1)
fmt.Println(result2)
// Output:
// [[a] [b] [c] [d] [e]]
// [[a b] [c d] [e]]
}
Equal
檢查兩個切片是否相等,相等條件:切片長度相同,元素順序和值都相同。
import (
"fmt"
"github.com/duke-git/lancet/v2/slice"
)
func main() {
s1 := []int{1, 2, 3}
s2 := []int{1, 2, 3}
s3 := []int{1, 3, 2}
result1 := slice.Equal(s1, s2)
result2 := slice.Equal(s1, s3)
fmt.Println(result1)
fmt.Println(result2)
// Output:
// true
// false
}
Comma
用逗號每隔3位分割數字/字串,支援字首新增符號。引數 value 必須是數字或者可以轉為數字的字串, 否則返回空字串。
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/formatter"
)
func main() {
result1 := formatter.Comma("123", "")
result2 := formatter.Comma("12345", "$")
result3 := formatter.Comma(1234567, "¥")
fmt.Println(result1)
fmt.Println(result2)
fmt.Println(result3)
// Output:
// 123
// $12,345
// ¥1,234,567
}
ForEach
對 map 中的每對 key和 value 執行 iteratee 函式。
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/maputil"
)
func main() {
m := map[string]int{
"a": 1,
"b": 2,
"c": 3,
"d": 4,
}
var sum int
maputil.ForEach(m, func(_ string, value int) {
sum += value
})
fmt.Println(sum)
// Output:
// 10
}
Keys
返回 map 中所有 key 的切片。
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/maputil"
)
func main() {
m := map[int]string{
1: "a",
2: "a",
3: "b",
4: "c",
5: "d",
}
keys := maputil.Keys(m)
sort.Ints(keys)
fmt.Println(keys)
// Output:
// [1 2 3 4 5]
}
Merge
合併多個 maps 相同的 key 會被後來的 key 覆蓋。
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/maputil"
)
func main() {
m1 := map[int]string{
1: "a",
2: "b",
}
m2 := map[int]string{
1: "1",
3: "2",
}
result := maputil.Merge(m1, m2)
fmt.Println(result)
// Output:
// map[1:c 2:b 3:d]
}
RandInt
生成隨機int, 範圍[min, max)。
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/random"
)
func main() {
rInt := random.RandInt(1, 10)
fmt.Println(rInt)
}
RandString
生成給定長度的隨機字串,只包含字母(a-zA-Z)。
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/random"
)
func main() {
randStr := random.RandString(6)
fmt.Println(randStr) //pGWsze
}
以上這些只是部分的工具函式,如果想檢視所有內容可以訪問 https://www.golancet.cn/ 該網站。
再強大的函式工具庫也不可能涵蓋所有的場景,隨著現在 AI 的盛行,AI 的程式設計輔助工具也應運而生。在這裡我再分享一個免費的 PHP 程式碼直接轉換 Go 程式碼工具,這個工具簡直是 PHP 程式設計師的福音,直接將 PHP 程式碼貼上便自動生成了 Go 程式碼。
最後附上這個 AI 工具的地址 https://www.codeconvert.ai/php-to-golang-converter 趕快去使用吧。
歡迎關注、分享、點贊、收藏、在看,我是微信公眾號「碼農先森」作者。