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

cnblogs 2024-07-25 09:39:00 阅读 72

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

从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数。

大家好,我是码农先森。

从 PHP 转到 Go 的朋友,常常会因为没有便捷的工具函数而感到苦恼。PHP 写的多了就会形成路径依赖,在写 Go 的时候时不时就会想到 PHP 强大的数组函数。当然写 Go 的 PHPer 也想拥有这么强大的工具函数,在这个开源的编程世界总有一些伟大的程序员做着贡献,正是有了他们的存在,因此便有了 lancet 这样一个强大的 Go 语言工具函数库,下面我介绍一些常用的工具函数「文末附上了手册地址」。

<code>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 赶快去使用吧。


欢迎关注、分享、点赞、收藏、在看,我是微信公众号「码农先森」作者。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。