翼度科技»论坛 编程开发 PHP 查看内容

PHP转Go系列 | 推荐一个强大的Go语言工具函数库

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
大家好,我是码农先森。
从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数。当然写 Go 的 PHPer 也想拥有这么强大的工具函数,在这个开源的编程世界总有一些伟大的程序员做着贡献,正是有了他们的存在,因此便有了 lancet 这样一个强大的 Go 语言工具函数库,下面我介绍一些常用的工具函数「文末附上了手册地址」。
ContainChinese 验证字符串是否包含中文字符。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/validator"
  4. )
  5. func main() {
  6.     result1 := validator.ContainChinese("你好")
  7.     result2 := validator.ContainChinese("你好hello")
  8.     result3 := validator.ContainChinese("hello")
  9.     fmt.Println(result1)
  10.     fmt.Println(result2)
  11.     fmt.Println(result3)
  12.     // Output:
  13.     // true
  14.     // true
  15.     // false
  16. }
复制代码
IsChineseMobile 验证字符串是否是中国手机号码。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/validator"
  4. )
  5. func main() {
  6.     result1 := validator.IsChineseMobile("13263527980")
  7.     result2 := validator.IsChineseMobile("434324324")
  8.     fmt.Println(result1)
  9.     fmt.Println(result2)
  10.     // Output:
  11.     // true
  12.     // false
  13. }
复制代码
IsChineseIdNum 验证字符串是否是中国身份证号码。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/validator"
  4. )
  5. func main() {
  6.     result1 := validator.IsChineseIdNum("210911192105130715")
  7.     result2 := validator.IsChineseIdNum("123456")
  8.     fmt.Println(result1)
  9.     fmt.Println(result2)
  10.     // Output:
  11.     // true
  12.     // false
  13. }
复制代码
IsChinesePhone 验证字符串是否是中国电话座机号码。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/validator"
  4. )
  5. func main() {
  6.     result1 := validator.IsChinesePhone("010-32116675")
  7.     result2 := validator.IsChinesePhone("123-87562")
  8.     fmt.Println(result1)
  9.     fmt.Println(result2)
  10.     // Output:
  11.     // true
  12.     // false
  13. }
复制代码
IsCreditCard 验证字符串是否是信用卡号码。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/validator"
  4. )
  5. func main() {
  6.     result1 := validator.IsCreditCard("4111111111111111")
  7.     result2 := validator.IsCreditCard("123456")
  8.     fmt.Println(result1)
  9.     fmt.Println(result2)
  10.     // Output:
  11.     // true
  12.     // false
  13. }
复制代码
IsEmail 验证字符串是否是有效电子邮件地址。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/validator"
  4. )
  5. func main() {
  6.     result1 := validator.IsEmail("abc@xyz.com")
  7.     result2 := validator.IsEmail("a.b@@com")
  8.     fmt.Println(result1)
  9.     fmt.Println(result2)
  10.     // Output:
  11.     // true
  12.     // false
  13. }
复制代码
Contain 判断 slice 是否包含 value。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/slice"
  4. )
  5. func main() {
  6.     result1 := slice.Contain([]string{"a", "b", "c"}, "a")
  7.     result2 := slice.Contain([]int{1, 2, 3}, 4)
  8.     fmt.Println(result1)
  9.     fmt.Println(result2)
  10.     // Output:
  11.     // true
  12.     // false
  13. }
复制代码
Chunk 按照 size 参数均分 slice。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/slice"
  4. )
  5. func main() {
  6.     arr := []string{"a", "b", "c", "d", "e"}
  7.     result1 := slice.Chunk(arr, 1)
  8.     result2 := slice.Chunk(arr, 2)
  9.     fmt.Println(result1)
  10.     fmt.Println(result2)
  11.     // Output:
  12.     // [[a] [b] [c] [d] [e]]
  13.     // [[a b] [c d] [e]]
  14. }
复制代码
Equal 检查两个切片是否相等,相等条件:切片长度相同,元素顺序和值都相同。
  1. import (
  2.     "fmt"
  3.     "github.com/duke-git/lancet/v2/slice"
  4. )
  5. func main() {
  6.     s1 := []int{1, 2, 3}
  7.     s2 := []int{1, 2, 3}
  8.     s3 := []int{1, 3, 2}
  9.     result1 := slice.Equal(s1, s2)
  10.     result2 := slice.Equal(s1, s3)
  11.     fmt.Println(result1)
  12.     fmt.Println(result2)
  13.     // Output:
  14.     // true
  15.     // false
  16. }
复制代码
Comma 用逗号每隔3位分割数字/字符串,支持前缀添加符号。参数 value 必须是数字或者可以转为数字的字符串, 否则返回空字符串。
  1. package main
  2. import (
  3.     "fmt"
  4.     "github.com/duke-git/lancet/v2/formatter"
  5. )
  6. func main() {
  7.     result1 := formatter.Comma("123", "")
  8.     result2 := formatter.Comma("12345", "$")
  9.     result3 := formatter.Comma(1234567, "¥")
  10.     fmt.Println(result1)
  11.     fmt.Println(result2)
  12.     fmt.Println(result3)
  13.     // Output:
  14.     // 123
  15.     // $12,345
  16.     // ¥1,234,567
  17. }
复制代码
ForEach 对 map 中的每对 key和 value 执行 iteratee 函数。
  1. package main
  2. import (
  3.     "fmt"
  4.     "github.com/duke-git/lancet/v2/maputil"
  5. )
  6. func main() {
  7.     m := map[string]int{
  8.         "a": 1,
  9.         "b": 2,
  10.         "c": 3,
  11.         "d": 4,
  12.     }
  13.     var sum int
  14.     maputil.ForEach(m, func(_ string, value int) {
  15.         sum += value
  16.     })
  17.     fmt.Println(sum)
  18.     // Output:
  19.     // 10
  20. }
复制代码
Keys 返回 map 中所有 key 的切片。
  1. package main
  2. import (
  3.     "fmt"
  4.     "github.com/duke-git/lancet/v2/maputil"
  5. )
  6. func main() {
  7.     m := map[int]string{
  8.         1: "a",
  9.         2: "a",
  10.         3: "b",
  11.         4: "c",
  12.         5: "d",
  13.     }
  14.     keys := maputil.Keys(m)
  15.     sort.Ints(keys)
  16.     fmt.Println(keys)
  17.     // Output:
  18.     // [1 2 3 4 5]
  19. }
复制代码
Merge 合并多个 maps 相同的 key 会被后来的 key 覆盖。
  1. package main
  2. import (
  3.     "fmt"
  4.     "github.com/duke-git/lancet/v2/maputil"
  5. )
  6. func main() {
  7.     m1 := map[int]string{
  8.         1: "a",
  9.         2: "b",
  10.     }
  11.     m2 := map[int]string{
  12.         1: "1",
  13.         3: "2",
  14.     }
  15.     result := maputil.Merge(m1, m2)
  16.     fmt.Println(result)
  17.     // Output:
  18.     // map[1:c 2:b 3:d]
  19. }
复制代码
RandInt 生成随机int, 范围[min, max)。
  1. package main
  2. import (
  3.     "fmt"
  4.     "github.com/duke-git/lancet/v2/random"
  5. )
  6. func main() {
  7.     rInt := random.RandInt(1, 10)
  8.     fmt.Println(rInt)
  9. }
复制代码
RandString 生成给定长度的随机字符串,只包含字母(a-zA-Z)。
  1. package main
  2. import (
  3.     "fmt"
  4.     "github.com/duke-git/lancet/v2/random"
  5. )
  6. func main() {
  7.     randStr := random.RandString(6)
  8.     fmt.Println(randStr) //pGWsze
  9. }
复制代码
以上这些只是部分的工具函数,如果想查看所有内容可以访问 https://www.golancet.cn/ 该网站。
再强大的函数工具库也不可能涵盖所有的场景,随着现在 AI 的盛行,AI 的编程辅助工具也应运而生。在这里我再分享一个免费的 PHP 代码直接转换 Go 代码工具,这个工具简直是 PHP 程序员的福音,直接将 PHP 代码贴上便自动生成了 Go 代码。

最后附上这个 AI 工具的地址 https://www.codeconvert.ai/php-to-golang-converter 赶快去使用吧。
欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。


来源:https://www.cnblogs.com/yxhblogs/p/18305739
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具