fun

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 20, 2024 License: Apache-2.0 Imports: 35 Imported by: 1

README

algorithm

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 二分查找法
func TestBinarySearch(t *testing.T) {
	// 已排序的整数数组
	nums := []int{1, 3, 5, 6, 8, 9, 11, 15, 18, 20}

	// 要查找的值
	val := 11

	// 调用二分查找函数
	index := fun.BinarySearch(nums, val)

	// 输出结果
	if index != -1 {
		fmt.Printf("找到了值 %d 在索引 %d 的位置。\n", val, index)
	} else {
		fmt.Println("没有找到指定的值。")
	}
}

// @title: 斐波拉契数列-递归方法
func TestFibonacciRecursion(t *testing.T) {
	// 计算斐波那契数列的第10项
	n := 10
	fibNumber := fun.FibonacciRecursion(n)
	fmt.Printf("斐波那契数列的第%d项是:%d\n", n, fibNumber)

	// 输出前10项斐波那契数列
	fmt.Println("前10项斐波那契数列:")
	for i := 0; i < 10; i++ {
		fmt.Printf("%d ", fun.FibonacciRecursion(i))
	}
	fmt.Println()
}

// @title: 斐波拉契数列-迭代法
func TestFibonacciFind(t *testing.T) {
	// 计算斐波那契数列的第10项
	n := 10
	fibNumber := fun.FibonacciFind(n)
	fmt.Printf("斐波那契数列的第%d项是:%d\n", n, fibNumber)

	// 输出前10项斐波那契数列
	fmt.Println("前10项斐波那契数列:")
	for i := 0; i < 10; i++ {
		fmt.Printf("%d ", fun.FibonacciFind(i))
	}
	fmt.Println()
}

// @title: 雪花算法
func TestSnowflake(t *testing.T) {
	worker, _ := fun.Snowflake(10)
	id := worker.GetId()
	fmt.Println(id)
}

// @title: 快速排序
func TestQuickSort(t *testing.T) {
	nums := []int{10, 5, 2, 3, 7, 6, 8, 1, 9, 4}
	fun.QuickSort(nums, 0, len(nums)-1)
	fmt.Println(nums)
}

// @title: 冒泡排序
func TestBubbleSort(t *testing.T) {
	nums := []int{10, 5, 2, 3, 7, 6, 8, 1, 9, 4}
	fun.BubbleSort(nums)
	fmt.Println(nums)
}

// @title: 洗牌算法
func TestShuffle(t *testing.T) {
	nums := []int{10, 5, 2, 3, 7, 6, 8, 1, 9, 4}
	fun.Shuffle(nums)
	fmt.Println(nums)
}

bool

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 变量是否布尔类型
func TestIsBool(t *testing.T) {
	v := true
	//v := "技术狼"
	is := fun.IsBool(v)
	fmt.Println(is) // true
}

byte

package test

import (
	"bytes"
	"encoding/binary"
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: []byte转float32
func TestBytesToFloat32(t *testing.T) {
	f := float32(3.14)   // 直接定义一个 float32 值
	var buf bytes.Buffer // 使用 bytes.Buffer 来创建一个可写入的字节缓冲区

	// 将 float32 写入缓冲区
	err := binary.Write(&buf, binary.LittleEndian, f)
	if err != nil {
		fmt.Println("Error writing to buffer:", err)
		return
	}
	byteData := buf.Bytes() // 现在 buf.Bytes() 包含了 float32 的字节表示

	//
	data := fun.BytesToFloat32(byteData)
	fmt.Println(data)
}

// @title: []byte转float64
func TestBytesToFloat64(t *testing.T) {
	f := float64(3.14)   // 直接定义一个 float32 值
	var buf bytes.Buffer // 使用 bytes.Buffer 来创建一个可写入的字节缓冲区

	// 将 float64 写入缓冲区
	err := binary.Write(&buf, binary.LittleEndian, f)
	if err != nil {
		fmt.Println("Error writing to buffer:", err)
		return
	}
	byteData := buf.Bytes() // 现在 buf.Bytes() 包含了 float32 的字节表示

	//
	data := fun.BytesToFloat64(byteData)
	fmt.Println(data)
}

// @title: 将字节切片转换为字符串
func TestUnsafeBytesToString(t *testing.T) {
	byteSlice := []byte("技术狼(jishulang.com)")
	resultString := fun.UnsafeBytesToString(byteSlice)
	fmt.Println(resultString) // 输出: 技术狼(jishulang.com)
}

// @title: []byte转io.Reader
func TestBytesToIoReader(t *testing.T) {
	data := []byte("技术狼(jishulang.com)")

	// 使用 BytesToIoReader 函数将字节切片转换为 io.Reader
	reader := fun.BytesToIoReader(data)

	// 从 reader 中读取数据
	buf := make([]byte, len(data))
	_, err := reader.Read(buf)
	if err != nil {
		panic(err)
	}

	// 打印读取到的数据
	fmt.Println(string(buf))
}

// @title: base32加密
func TestBase32Encode(t *testing.T) {
	// 定义一个字节切片
	originalBytes := []byte("技术狼(jishulang.com)")

	// 使用 Base32Encode 函数编码字节切片
	encodedString := fun.Base32Encode(originalBytes)

	// 打印编码后的 base32 字符串
	fmt.Println("Encoded String:", encodedString)
}

// @title: base32解密
func TestBase32Decode(t *testing.T) {
	originalBytes := []byte("技术狼(jishulang.com)")
	encodedString := fun.Base32Encode(originalBytes)

	//
	decodeString, err := fun.Base32Decode(encodedString)
	fmt.Println(string(decodeString), err)
}

crypto

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: Md5加密
func TestMd5(t *testing.T) {
	is := fun.Md5("技术狼")
	fmt.Println(is)
}

// @title: sha1加密
func TestSha1(t *testing.T) {
	is := fun.Sha1("技术狼")
	fmt.Println(is)
}

// @title: Sha256加密
func TestSha256(t *testing.T) {
	is := fun.Sha256("技术狼")
	fmt.Println(is)
}

// @title: Sha512加密
func TestSha512(t *testing.T) {
	is := fun.Sha512("技术狼")
	fmt.Println(is)
}

// @title: CBC(密码分组链接模式)
func TestCBC(t *testing.T) {
	// 这里使用一个固定的key和IV只是为了演示,实际应用中应该使用更安全的方式生成它们
	key := []byte("xxxxxxxxxxxxxxxx") // 必须是16, 24, 或32字节长
	//iv := key[:aes.BlockSize]                     // 使用key的一部分作为IV,但实际中应随机生成

	plaintext := []byte("技术狼")

	// 加密数据
	encrypted, err := fun.AesEncryptCBC(plaintext, key)
	fmt.Println("Encrypted:", encrypted, err)

	// 解密数据
	decrypted, err := fun.AesDecryptCBC(encrypted, key)
	fmt.Println("Decrypted:", string(decrypted), err)
}

// @title: CFB(密码反馈模式)
func TestCFB(t *testing.T) {
	// 这里使用一个固定的key和IV只是为了演示,实际应用中应该使用更安全的方式生成它们
	key := []byte("xxxxxxxxxxxxxxxx") // 必须是16, 24, 或32字节长
	//iv := key[:aes.BlockSize]                     // 使用key的一部分作为IV,但实际中应随机生成

	plaintext := []byte("技术狼")

	// 加密数据
	encrypted, err := fun.AesEncryptCFB(plaintext, key)
	fmt.Println("Encrypted:", encrypted, err)

	// 解密数据
	decrypted, err := fun.AesDecryptCFB(encrypted, key)
	fmt.Println("Decrypted:", string(decrypted), err)
}

// @title: ECB(电码本模式)
func TestECB(t *testing.T) {
	// 这里使用一个固定的key和IV只是为了演示,实际应用中应该使用更安全的方式生成它们
	key := []byte("xxxxxxxxxxxxxxxx") // 必须是16, 24, 或32字节长
	//iv := key[:aes.BlockSize]                     // 使用key的一部分作为IV,但实际中应随机生成

	plaintext := []byte("技术狼")

	// 加密数据
	encrypted, err := fun.AesEncryptECB(plaintext, key)
	fmt.Println("Encrypted:", encrypted, err)

	// 解密数据
	decrypted, err := fun.AesDecryptECB(encrypted, key)
	fmt.Println("Decrypted:", string(decrypted), err)
}

dir

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 目录是否存在
func TestDirIsExist(t *testing.T) {
	is, err := fun.DirIsExist("../test")
	fmt.Println(is, err)
}

// @title: 创建目录
func TestDirCreate(t *testing.T) {
	err := fun.DirCreate("../test2", 0777)
	fmt.Println(err)
}

// @title: 目录复制
func TestDirCopy(t *testing.T) {
	err := fun.DirCopy("../test", "../test2")
	fmt.Println(err)
}

// @title: 目录路径以斜杠结尾
func TestDirEndsWithSlash(t *testing.T) {
	err := fun.DirEndsWithSlash("E:\\jishulangcom\\go-fun")
	fmt.Println(err)
}

// @title: 获取某目录指定后缀的所有文件
func TestDirFilesBySuffix(t *testing.T) {
	arr, err := fun.DirFilesBySuffix("./", ".go")
	fmt.Println(arr, err)
}

// @title: 列出指定目录的所有文件及目录
func TestListDirFiles(t *testing.T) {
	arr, err := fun.ListDirFiles("./")
	fmt.Println(arr, err)
}

json

package test

import (
	"fmt"
	"gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: json转map
func TestJsonToMap(t *testing.T) {
	jsonStr := `{"name":"技术狼", "site":"jishulang.com"}`
	jsonBytes := []byte(jsonStr)
	resultMap, err := fun.JsonToMap(jsonBytes)
	fmt.Println(resultMap, err)
}

// @title: map转json
func TestMapToJson(t *testing.T) {
	jsonStr := `{"name":"技术狼", "site":"jishulang.com"}`
	jsonBytes := []byte(jsonStr)
	resultMap, _ := fun.JsonToMap(jsonBytes)

	str := fun.MapToJson(resultMap)
	fmt.Println(str)
}

file

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 文件是否存在
func TestFileIsExist(t *testing.T) {
	is, err := fun.FileIsExist("./file_test.go")
	fmt.Println(is, err)
}

// @title: 文件复制
func TestFileCopy(t *testing.T) {
	err := fun.FileCopy("./file_test.go", "./file_test2.go")
	fmt.Println(err)
}

// @title: 获取文件内容
func TestFileGetContents(t *testing.T) {
	b, err := fun.FileGetContents("./file_test.go")
	fmt.Println(string(b), err)
}

// @title: 文件写入内容
func TestFilePutContents(t *testing.T) {
	err := fun.FilePutContents("./file_test.txt", "技术狼")
	fmt.Println(err)
}

// @title: 文件隐藏(windows)
func TestFileHide(t *testing.T) {
	is, err := fun.FileHide("./file_test.txt")
	fmt.Println(is, err)
}

float

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 变量是否浮点类型
func TestIsFloat(t *testing.T) {
	is := fun.IsFloat(3.14)
	fmt.Println(is)
}

// @title: float64转string
func TestFloat64ToStr(t *testing.T) {
	is := fun.Float64ToStr(3.14)
	fmt.Println(is)
}

// @title: float64小数位数
func TestFloat64Decimal(t *testing.T) {
	is := fun.Float64Decimal(3.14)
	fmt.Println(is)
}

// @title: float32转byte
func TestFloat32ToByte(t *testing.T) {
	is := fun.Float32ToByte(3.14)
	fmt.Println(is)
}

// @title: float64转byte
func TestFloat64ToByte(t *testing.T) {
	is := fun.Float64ToByte(3.14)
	fmt.Println(is)
}

// @title: float64转int64
func TestFloat64ToInt64(t *testing.T) {
	data := fun.Float64ToInt64(3.14)
	fmt.Println(data)

	data2 := fun.Float64ToInt64(3.54)
	fmt.Println(data2)
}

// @title: float64转int
func TestFloat64ToInt(t *testing.T) {
	data := fun.Float64ToInt(3.14)
	fmt.Println(data)

	data2 := fun.Float64ToInt(3.54)
	fmt.Println(data2)
}

// @title: float32转int64
func TestFloat32ToInt64(t *testing.T) {
	data := fun.Float32ToInt64(3.14)
	fmt.Println(data)

	data2 := fun.Float32ToInt64(3.54)
	fmt.Println(data2)
}

// @title: float32转int
func TestFloat32ToInt(t *testing.T) {
	data := fun.Float32ToInt(3.14)
	fmt.Println(data)

	data2 := fun.Float32ToInt(3.54)
	fmt.Println(data2)
}

go

package test

import (
	fun "gitee.com/jishulangcom/go-fun"
	"log"
	"testing"
)

type JslStruct struct{}

func (y JslStruct) Fun1(i int, str string) (int, string) {
	return i, str
}

// 魔法函数
func TestCallFun(t *testing.T) {
	// 调用某结构体的方法
	data := JslStruct{}
	i, str := data.Fun1(10, "test")
	log.Println(i, str)

	// 使用魔法函数调用某结构体的方法
	res2 := fun.CallFun(JslStruct{}, "Fun1", 20, "test2")
	log.Println(res2[0], res2[1])
}

int

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: int转字符
func TestIntToStr(t *testing.T) {
	is := fun.IntToStr(100)
	fmt.Println(is)
}

// @title: int64转string
func TestInt64ToStr(t *testing.T) {
	is := fun.Int64ToStr(100)
	fmt.Println(is)
}

// @title: int64转int
func TestInt64ToInt(t *testing.T) {
	is := fun.Int64ToInt(100)
	fmt.Println(is)
}

// @title: int转int64
func TestIntToInt64(t *testing.T) {
	is := fun.IntToInt64(100)
	fmt.Println(is)
}

// @title: int转float64
func TestIntToFloat64(t *testing.T) {
	is := fun.IntToFloat64(100)
	fmt.Println(is)
}

// @title: 判断Int是否是奇数
func TestIntIsOdd(t *testing.T) {
	is := fun.IntIsOdd(101)
	fmt.Println(is)
}

// @title: 判断Int是否是偶数
func TestIntIsEven(t *testing.T) {
	is := fun.IntIsEven(100)
	fmt.Println(is)
}

// @title: 判断Int64是否是奇数
func TestInt64IsOdd(t *testing.T) {
	is := fun.Int64IsOdd(101)
	fmt.Println(is)
}

// @title: 判断Int64是否是偶数
func TestInt64IsEven(t *testing.T) {
	is := fun.Int64IsEven(100)
	fmt.Println(is)
}

// @title: 是否是int相关类型
func TestIsInt(t *testing.T) {
	is := fun.IsInt(100)
	fmt.Println(is)
}

// @title: 是否是int类型
func TestIsNumeric(t *testing.T) {
	is := fun.IsNumeric(100)
	fmt.Println(is)
}

interface

package test

import (
	"encoding/json"
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: Interface转换string
func TestInterfaceToStr(t *testing.T) {
	var val string
	var err error

	fmt.Println("======nil=======")
	val, err = fun.InterfaceToStr(nil)
	fmt.Println(val, err)

	fmt.Println("======浮点=======")
	val, err = fun.InterfaceToStr(1.111111)
	fmt.Println(val, err)
	val, err = fun.InterfaceToStr("1.111111")
	fmt.Println(val, err)

	fmt.Println("======浮点(科学计数)=======")
	val, err = fun.InterfaceToStr(1.111111e+06)
	fmt.Println(val, err)
	val, err = fun.InterfaceToStr("1.1111111111111112e+02")
	fmt.Println(val, err)
	val, err = fun.InterfaceToStr("11111111111111111111111111111111.2e+02")
	fmt.Println(val, err)

	fmt.Println("======布尔=======")
	val, err = fun.InterfaceToStr(true)
	fmt.Println(val, err)

	fmt.Println("======字符串=======")
	val, err = fun.InterfaceToStr("技术狼")
	fmt.Println(val, err)

	fmt.Println("======指针=======")
	var i int64 = 100
	val, err = fun.InterfaceToStr(&i)
	fmt.Println(val, err)

	fmt.Println("======json.Number=======")
	val, err = fun.InterfaceToStr(json.Number("200"))
	fmt.Println(val, err)

	fmt.Println("======[]byte=======")
	val, err = fun.InterfaceToStr([]byte("jishulang.com"))
	fmt.Println(val, err)

}

// @title: Interface转float64
func TestInterfaceToFloat64(t *testing.T) {
	var val float64
	var err error

	fmt.Println("======nil=======")
	val, err = fun.InterfaceToFloat64(nil)
	fmt.Println(val, err)

	fmt.Println("======浮点=======")
	val, err = fun.InterfaceToFloat64(1.111111)
	fmt.Println(val, err)
	val, err = fun.InterfaceToFloat64("1.111111")
	fmt.Println(val, err)

	fmt.Println("======浮点(科学计数)=======")
	val, err = fun.InterfaceToFloat64(1.111111e+06)
	fmt.Println(val, err)
	val, err = fun.InterfaceToFloat64("1.111111e+06")
	fmt.Println(val, err)

	fmt.Println("======布尔=======")
	val, err = fun.InterfaceToFloat64(true)
	fmt.Println(val, err)

	fmt.Println("======字符串=======")
	val, err = fun.InterfaceToFloat64("技术狼")
	fmt.Println(val, err)

	fmt.Println("======指针=======")
	var i int64 = 100
	val, err = fun.InterfaceToFloat64(&i)
	fmt.Println(val, err)

	fmt.Println("======json.Number=======")
	val, err = fun.InterfaceToFloat64(json.Number("200.1"))
	fmt.Println(val, err)

	fmt.Println("======[]byte=======")
	val, err = fun.InterfaceToFloat64([]byte("300.1"))
	fmt.Println(val, err)
}

// @title: Interface转int64
func TestInterfaceToInt64(t *testing.T) {
	var val int64
	var err error

	fmt.Println("======nil=======")
	val, err = fun.InterfaceToInt64(nil)
	fmt.Println(val, err)

	fmt.Println("======浮点=======")
	val, err = fun.InterfaceToInt64(1.111111)
	fmt.Println(val, err)
	val, err = fun.InterfaceToInt64("1.111111")
	fmt.Println(val, err)

	fmt.Println("======浮点(科学计数)=======")
	val, err = fun.InterfaceToInt64(1.111111e+06)
	fmt.Println(val, err)
	val, err = fun.InterfaceToInt64("1.111111e+06")
	fmt.Println(val, err)

	fmt.Println("======布尔=======")
	val, err = fun.InterfaceToInt64(true)
	fmt.Println(val, err)

	fmt.Println("======字符串=======")
	val, err = fun.InterfaceToInt64("技术狼")
	fmt.Println(val, err)

	fmt.Println("======指针=======")
	var i int64 = 100
	val, err = fun.InterfaceToInt64(&i)
	fmt.Println(val, err)

	fmt.Println("======json.Number=======")
	val, err = fun.InterfaceToInt64(json.Number("200"))
	fmt.Println(val, err)

	fmt.Println("======[]byte=======")
	val, err = fun.InterfaceToInt64([]byte("300"))
	fmt.Println(val, err)
}

// @title: Interface是否是结构体
func TestInterfaceIsStruct(t *testing.T) {
	var is bool

	type User struct {
		Name string `json:"name"`
	}
	is = fun.InterfaceIsStruct(User{})
	fmt.Println(is)
}

// @title: Interface是否是指针
func TestIInterfaceIsPtr(t *testing.T) {
	var is bool

	var str string
	is = fun.InterfaceIsPtr(&str)
	fmt.Println(is)
}

io

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"os"
	"testing"
)

// @title: io.Reader转[]byte
func TestIoReaderToBytes(t *testing.T) {
	// Open a file
	file, err := os.Open("io_test.go")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	// Read the file content into a byte slice
	content := fun.IoReaderToBytes(file)

	// Print the content
	fmt.Println("File Content:")
	fmt.Println(string(content))
}

json


rsa

package test

import (
	"encoding/json"
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// Transaction Submit KEY(自家站点)
var transactionSubmitPrivateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBALu4z/1kcTys46RTSBgS1Ie+f+AJZXPHpFObXw/UsdCFxHng26ilRvTAGwptb14RunxinOPB1ALhwAPGBZBi/EQB9azhxsdNQquWqfgCNgMd87wLA+YFRwid/EQitJJJgpc3K8PhRh/stHQfxFnALPTarh0aeE4HL0gtP1WG92c3AgMBAAECgYEAnBFcqlhVZJKAd9/dclZFZ83TVpm5RPbYAcKM2AaHBswPuxxcwusWAOmuEY9GJbkrh7ocoaZF81doYjrB6XbCLwE5ZO5wC/awuzlChIUEYbuKHYaHklOIRXZdVB5F1VWNuigm9+Bp1Z1tgMPJ3XuPh8vcLsBjYzoW/n52KZjWX/ECQQD2vi8IJvOoq3VTMguBsX1C/WuIP7i6jS8p794SyYj7OlZ5lCDj38/YxSGbTL/1sOQ2hTPqfPjnOWbkIRfA/8srAkEAwsPElz/V3dVYQJDm4B4aOTbA5RJWHcSyvCzme3J50V+f1n+NYT5A7vsfuwD/EtOg4JUAK2oKEJYJx4qDIJAeJQJBAJsDjp6rggakeVgkJ7B6Jnzwox79EXw5+Lh7FuRsst9KnktRcXxX/sdryZo8lJixYh6SfrRBgUoa+PY3iCnbSfMCQQCY9oXcwB7olZk1RFh/JkU0MCN5BVirEoPJtH3j8DlqTe7L2OuhtvHqf0IhbZvnHlyYZY13i1WSRzQxCkEH/wgdAkB8T84E5yKQ4n0PoigggVrCv3SekwZMOxtka5/KfH9ioJOq7XQZN5nZHxX5xIFmngiowOiAIJ/Hpnv72/Oi3Ns+"
var transactionSubmitPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7uM/9ZHE8rOOkU0gYEtSHvn/gCWVzx6RTm18P1LHQhcR54NuopUb0wBsKbW9eEbp8YpzjwdQC4cADxgWQYvxEAfWs4cbHTUKrlqn4AjYDHfO8CwPmBUcInfxEIrSSSYKXNyvD4UYf7LR0H8RZwCz02q4dGnhOBy9ILT9VhvdnNwIDAQAB"

// Transaction Notification KEY(pay平台)
var transactionNotificationPrivateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBALu4z/1kcTys46RTSBgS1Ie+f+AJZXPHpFObXw/UsdCFxHng26ilRvTAGwptb14RunxinOPB1ALhwAPGBZBi/EQB9azhxsdNQquWqfgCNgMd87wLA+YFRwid/EQitJJJgpc3K8PhRh/stHQfxFnALPTarh0aeE4HL0gtP1WG92c3AgMBAAECgYEAnBFcqlhVZJKAd9/dclZFZ83TVpm5RPbYAcKM2AaHBswPuxxcwusWAOmuEY9GJbkrh7ocoaZF81doYjrB6XbCLwE5ZO5wC/awuzlChIUEYbuKHYaHklOIRXZdVB5F1VWNuigm9+Bp1Z1tgMPJ3XuPh8vcLsBjYzoW/n52KZjWX/ECQQD2vi8IJvOoq3VTMguBsX1C/WuIP7i6jS8p794SyYj7OlZ5lCDj38/YxSGbTL/1sOQ2hTPqfPjnOWbkIRfA/8srAkEAwsPElz/V3dVYQJDm4B4aOTbA5RJWHcSyvCzme3J50V+f1n+NYT5A7vsfuwD/EtOg4JUAK2oKEJYJx4qDIJAeJQJBAJsDjp6rggakeVgkJ7B6Jnzwox79EXw5+Lh7FuRsst9KnktRcXxX/sdryZo8lJixYh6SfrRBgUoa+PY3iCnbSfMCQQCY9oXcwB7olZk1RFh/JkU0MCN5BVirEoPJtH3j8DlqTe7L2OuhtvHqf0IhbZvnHlyYZY13i1WSRzQxCkEH/wgdAkB8T84E5yKQ4n0PoigggVrCv3SekwZMOxtka5/KfH9ioJOq7XQZN5nZHxX5xIFmngiowOiAIJ/Hpnv72/Oi3Ns+"
var transactionNotificationPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7uM/9ZHE8rOOkU0gYEtSHvn/gCWVzx6RTm18P1LHQhcR54NuopUb0wBsKbW9eEbp8YpzjwdQC4cADxgWQYvxEAfWs4cbHTUKrlqn4AjYDHfO8CwPmBUcInfxEIrSSSYKXNyvD4UYf7LR0H8RZwCz02q4dGnhOBy9ILT9VhvdnNwIDAQAB"

type transactionSubmitDto struct {
	Currency string `json:"currency"`
	Amount   string `json:"amount"`
	Sign     string `json:"sign"`
}

type transactionNotificationDto struct {
	Id     int64  `json:"id"`
	Amount string `json:"amount"`
	Sign   string `json:"sign"`
}

// @title: Rsa Sha1 签名验证
func TestRsaSha1(t *testing.T) {
	//Rsa Sha1 签名(模拟取得Notification数据)
	originalData, _ := rsaSha1Sign(transactionNotificationPrivateKey)
	originalDataByte, _ := json.Marshal(originalData)
	fmt.Println("originalData json:", string(originalDataByte))

	//Rsa Sha1 签名验证
	rsaData := transactionNotificationDto{}
	json.Unmarshal(originalDataByte, &rsaData)
	delete(originalData, "sign")
	signatureStr := fun.SortingSplicing(originalData)
	ok, err := fun.RsaSha1Verify(signatureStr, rsaData.Sign, transactionNotificationPublicKey)
	if err != nil {
		fmt.Println("RsaSha1Verify err:", err)
		return
	}
	fmt.Println(ok)
}

func rsaSha1Sign(privateKey string) (map[string]interface{}, error) {
	data := make(map[string]interface{})
	data["amount"] = "100"

	origData := fun.SortingSplicing(data)
	signStr, err := fun.RsaSha1Sign(origData, privateKey)
	if err != nil {
		return nil, err
	}
	data["sign"] = string(signStr)

	return data, err
}

slice

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 是否是切片
func TestIsSlice(t *testing.T) {
	arr := []int{1, 2, 3, 4}
	v := fun.IsSlice(arr)
	fmt.Println(v)
}

// @title: 是否是数组
func TestIsArray(t *testing.T) {
	arr := []int{1, 2, 3, 4}
	v := fun.IsArray(arr)
	fmt.Println(v)

	arr2 := [...]int{1, 2, 3, 4}
	v2 := fun.IsArray(arr2)
	fmt.Println(v2)

	arr3 := [4]int{1, 2, 3, 4}
	v3 := fun.IsArray(arr3)
	fmt.Println(v3)
}

// @title: 是否是切片
func TestImplode(t *testing.T) {
	arr := []int{1, 2, 3, 4}
	v := fun.Implode(",", arr)
	fmt.Println(v)
}

string

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 生成N个随机字符
func TestRandString(t *testing.T) {
	str := fun.RandString(10)
	fmt.Println(str) // lIETOH7p1x
}

// @title: 是否手机号
func TestIsMobile(t *testing.T) {
	var is bool

	// 移动
	arr1 := []int{134, 135, 136, 137, 138, 139, 147, 150, 151, 152, 157, 158, 159, 182, 187, 188, 198, 178}

	// 联通
	arr2 := []int{130, 131, 132, 145, 155, 156, 166, 171, 175, 176, 185, 186}

	// 电信
	arr3 := []int{133, 149, 153, 173, 177, 180, 181, 189, 191, 199}

	// 合并
	arr := append(arr1, arr2...)
	arr = append(arr, arr3...)

	for _, m := range arr {
		mobile := fmt.Sprintf("%d00000000", m)
		is = fun.IsMobile(mobile)
		fmt.Println(mobile, is)
	}
}

// @title: 手机号*号处理
func TestMobileStar(t *testing.T) {
	mobile := fun.MobileStar("13600000001")
	fmt.Println(mobile) // 136****01
}

// @title: 是否邮箱
func TestIsEmail(t *testing.T) {
	email := fun.IsEmail("815437877@qq.com")
	fmt.Println(email) // true
}

// @title: string转int
func TestStrToInt(t *testing.T) {
	var i int
	var err error

	i, err = fun.StrToInt("123456")
	fmt.Println(i, err) // 123456 <nil>

	i, err = fun.StrToInt("1.23456")
	fmt.Println(i, err) // 0 strconv.Atoi: parsing "1.23456": invalid syntax
}

// @title: string转int64
func TestStrToInt64(t *testing.T) {
	var i int64
	var err error

	i, err = fun.StrToInt64("123456")
	fmt.Println(i, err) // 123456 <nil>

	i, err = fun.StrToInt64("1.23456")
	fmt.Println(i, err) // 0 strconv.Atoi: parsing "1.23456": invalid syntax
}

// @title: string转uint64
func TestStrToUint64(t *testing.T) {
	var i uint64
	var err error

	i, err = fun.StrToUint64("123456")
	fmt.Println(i, err) // 123456 <nil>

	i, err = fun.StrToUint64("1.23456")
	fmt.Println(i, err) // 0 strconv.Atoi: parsing "1.23456": invalid syntax
}

// @title: string转Float64
func TestStrToFloat64(t *testing.T) {
	i, err := fun.StrToFloat64("123456.789")
	fmt.Println(i, err) // 123456 <nil>
}

// @title: string转*big.Float
func TestStrToBigFloat(t *testing.T) {
	i, err := fun.StrToBigFloat("123456.789")
	fmt.Println(i, err) // 123456 <nil>
}

// @title: string转*big.Int
func TestStrToBigInt(t *testing.T) {
	bigInt, ok := fun.StrToBigInt("0.123", 3)
	fmt.Println(bigInt.String(), ok) // 123 true
}

// @title: 某字符串是否存在数组中
func TestStrIsInArr(t *testing.T) {
	arr := []string{"技术狼(jishulang.com)", "jishulang.com"}
	is := fun.StrIsInArr("技术狼(jishulang.com)", arr)
	fmt.Println(is)
}

// @title: string是否是浮点
func TestStrIsFloat(t *testing.T) {
	is := fun.StrIsFloat("0.123")
	fmt.Println(is)
}

// @title: string是否是浮点
func TestIsInString(t *testing.T) {
	is := fun.IsInString("技术狼", "技术狼(jishulang.com)")
	fmt.Println(is)
}

// @title: 是否是字符类型
func TestIsString(t *testing.T) {
	is := fun.IsString("技术狼")
	fmt.Println(is)
}

// @title: 字符串打散为数组
func TestExplode(t *testing.T) {
	m := fun.Explode(",", "jishulang.com,jishulang.net,jishulang.cn")
	fmt.Println(m)
}

// @title: 获取字符串中字符的数量
func TestMbStrLen(t *testing.T) {
	var l int
	l = fun.MbStrLen("技术狼(jishulang.com)")
	fmt.Println(l)

	// 获取字节数(一个中文字符在UTF-8中通常占用3个字节)
	l = len("技术狼(jishulang.com)")
	fmt.Println(l)
}

// @title: 字符串首字母转成小写
func TestLcfirst(t *testing.T) {
	l := fun.Lcfirst("JISHULANG.COM")
	fmt.Println(l)
}

// @title: 字符串首字母转成小写
func TestUcfirst(t *testing.T) {
	l := fun.Ucfirst("jishulang.com")
	fmt.Println(l)
}

// @title: 字符串全转大写
func TestStrToUpper(t *testing.T) {
	l := fun.StrToUpper("jishulang.COM")
	fmt.Println(l)
}

// @title: 字符串全转小写
func TestStrToLower(t *testing.T) {
	l := fun.StrToLower("jishulang.COM")
	fmt.Println(l)
}

// @title: 字符串全转小写
func TestUcword(t *testing.T) {
	l := fun.Ucword("jishulang.com jishulang.cn jishulang.net")
	fmt.Println(l)
}

// @title: 移除字符串两侧的字符
func TestTrim(t *testing.T) {
	l := fun.Trim("====技术狼==jishulang.com==", "=")
	fmt.Println(l)
}

// @title: 去除全部空格
func TestTrimAll(t *testing.T) {
	l := fun.TrimAll("  技术狼 jishulang.com   ")
	fmt.Println(l)
}

// @title: 移除字符串左侧的字符
func TestLtrim(t *testing.T) {
	str := fun.Ltrim("技术狼jishulang.com, 技术狼jishulang.cn", "技术狼")
	fmt.Println(str)
}

// @title: 移除字符串右侧的字符
func TestRtrim(t *testing.T) {
	var str string
	str = fun.Rtrim("技术狼jishulang.com, 技术狼jishulang", "jishulang")
	fmt.Println(str) // 技术狼jishulang.com, 技术狼

	str = fun.Rtrim("技术狼jishulang.com, 技术狼jishulang.com", "jishulang")
	fmt.Println(str) // 技术狼jishulang.com, 技术狼jishulang.com

	str = fun.Rtrim("技术狼jishulang.com, 技术狼jishulang.jjj", "jishulang")
	fmt.Println(str) // 技术狼jishulang.com, 技术狼jishulang.

	str = fun.Rtrim("技术狼jishulang.com, 技术狼jishulang.oooo", "jishulang")
	fmt.Println(str) // 技术狼jishulang.com, 技术狼jishulang.oooo
}

// @title: 移除字符串左侧的字符
func TestOrd(t *testing.T) {
	str := fun.Ord("jishulang.com")
	fmt.Println(str)
}

// @title: 传ASCII值返回字符
func TestChr(t *testing.T) {
	str := fun.Chr(106)
	fmt.Println(str)
}

// @title: 传ASCII值返回字符
func TestStrRepeat(t *testing.T) {
	str := fun.StrRepeat("技术狼", 3)
	fmt.Println(str)
}

// @title: 字符替换
func TestStrReplace(t *testing.T) {
	str := fun.StrReplace("技术狼jishulang.com", "jishulang.com", "jishulang.cn")
	fmt.Println(str)
}

// @title: 是否是科学计数
func TestIsScientificNotation(t *testing.T) {
	str := fun.IsScientificNotation("4.843671275939215e+21")
	fmt.Println(str)
}

// @title: 科学计数转换为字符串数字
func TestScientificNotationToStrings(t *testing.T) {
	str := "4.843000e+2"
	decimalStr, _ := fun.ScientificNotationToStrings(str, 5)
	decimalStr = fun.RemoveAllZerosFromLastDecimal(decimalStr) // 移除无效的0
	fmt.Println(decimalStr)
}

// @title: 获取小数点后的位数
func TestCountDecimalPlaces(t *testing.T) {
	//str := "4.843000e+2"
	str := "4.843000"
	//str := "技术狼.com"
	//str := "100"
	i := fun.CountDecimalPlaces(str)
	fmt.Println(i)
}

// @title: 保留n位小数
func TestRetainDecimalPlaces(t *testing.T) {
	str := "4.843000"
	amount, err := fun.RetainDecimalPlaces(str, 2)
	fmt.Println(amount, err)
}

// @title: 金额精度
func TestAmountDecimal(t *testing.T) {
	//str := "1.3345345354e+3" // 科学计数
	//str := "1334.5345354354788" // 小数位截取
	str := "1334.5300000000" // 去除无效的0
	decimalStr := fun.AmountDecimal(str, 5)
	fmt.Println(decimalStr)
}

// @title: 移出小数点后无效的数
func TestRemoveAllZerosFromLastDecimal(t *testing.T) {
	str := "4.843000"
	amount := fun.RemoveAllZerosFromLastDecimal(str)
	fmt.Println(amount)
}

struct

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 结构体转换为数组
func TestStructToArr(t *testing.T) {
	type User struct {
		Name string `json:"name" yaml:"name" xml:"name"`
		Sex  int    `json:"sex"`
	}
	str := fun.StructToArr(User{})
	fmt.Println(str)
}

time

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
	"time"
)

// @title: Rfc3339格式时间转为正常时间
func TestRfc3339ToDatetime(t *testing.T) {
	val := "2018-01-14T21:45:54+08:00"
	str := fun.Rfc3339ToDatetime(val)
	fmt.Println(str)
}

// @title: 标准时间转为时间戳
func TestDatetimeToTimestamp(t *testing.T) {
	val := "2018-01-14 21:45:54"
	str := fun.DatetimeToTimestamp(val)
	fmt.Println(str)
}

// @title: 标准时间转化为时间戳
func TestTimestampToDatetime(t *testing.T) {
	str := fun.TimestampToDatetime(1515937554)
	fmt.Println(str)
}

// @title: 获取当前标准时间
func TestCurrentDateTime(t *testing.T) {
	str := fun.CurrentDateTime()
	fmt.Println(str)
}

// @title: 获取当前时间戳(秒)
func TestTimeStampSecond(t *testing.T) {
	data := fun.TimeStampSecond()
	fmt.Println(data)
}

// @title: 获取当前时间戳(毫秒)
func TestMillisecond(t *testing.T) {
	data := fun.Millisecond()
	fmt.Println(data)
}

// @title: 一个字符串时间与当前时间的时间差
func TestDateTimeStrAadNowSub(t *testing.T) {
	data, err := fun.DateTimeStrAadNowSub("2022-05-22 23:59:59")
	fmt.Println(data, err)
}

// @title: 时间戳转数字格式日期字符
func TestTimestampToDate(t *testing.T) {
	str := fun.TimestampToDate(time.Now().Unix(), time.UTC)
	fmt.Println(str) // 2023-04-04
}

// @title: 时间戳转数字格式日期字符
func TestTimestampToDateNumber(t *testing.T) {
	str := fun.TimestampToDateNumber(time.Now().Unix(), fun.LocAsiaShanghai())
	fmt.Println(str) // 20230404
}

// @title: 时间戳转数字格式日期字符
func TestLocAsiaShanghai(t *testing.T) {
	data := fun.LocAsiaShanghai()
	fmt.Println(data)
}

// @title: 时间戳转数字格式日期字符
func TestLocUTC(t *testing.T) {
	data := fun.LocUTC()
	fmt.Println(data)
}

// @title: 时间戳转数字格式日期字符
func TestLocAmericaLosAngeles(t *testing.T) {
	data := fun.LocAmericaLosAngeles()
	fmt.Println(data)
}

// @title: 获取某个时间起,N天内的连续的数字格式日期
func TestGetSometimeApartNDaysTimes(t *testing.T) {
	list := fun.GetSometimeApartNDaysTimes(time.Now().UTC(), +1, 7, true)
	fmt.Println(list)
}

// @title: 获取某个时间起,N天内的连续的时间(指定日期格式)
func TestGetSometimeApartNDaysTimesFormat(t *testing.T) {
	list := fun.GetSometimeApartNDaysTimesFormat(time.Now().UTC(), +1, 7, true, "2006-01-02")
	fmt.Println(list)
}

// @title: 获取某个时间起,第N天内的时间(指定日期格式)
func TestGetSometimeApartNDaysTimeFormat(t *testing.T) {
	date := fun.GetSometimeApartNDaysTimeFormat(time.Now().UTC(), +1, "2006-01-02")
	fmt.Println(date) // 明天日期
}

web

package test

import (
	"fmt"
	fun "gitee.com/jishulangcom/go-fun"
	"testing"
)

// @title: 获取URL主域名
func TestUrlDomain(t *testing.T) {
	str := fun.UrlDomain("https://www.jishulang.com/index.html?source=gofun")
	fmt.Println(str)
}

// @title: 获取服务器端IP
func TestServeIp(t *testing.T) {
	str := fun.ServeIp()
	fmt.Println(str)
}

Documentation

Overview

// @title: 查找算法 // @auth: 技术狼(jishulang.com)

【包名:】雪花算法 【作者:】技术狼

【包名:】排序算法 【作者:】技术狼

// @title: 布尔相关函数
// @auth: 技术狼(jishulang.com)

// @title: 加密 // @auth: 技术狼(jishulang.com)

【包名:】浮点相关函数 【作者:】技术狼

【包名:】int相关函数 【作者:】技术狼

// @title: io // @auth: 技术狼(jishulang.com)

// @title: 签名 // @auth: 技术狼(jishulang.com)

【包名:】数组相关函数 【作者:】技术狼

// @title: 字符串相关函数 // @auth: 技术狼(jishulang.com)

【包名:】xml相关函数
【作者:】技术狼

Index

Constants

View Source
const ORIGIN_TIME = "2006-01-02 15:04:05" //go原始时间

Variables

This section is empty.

Functions

func AesDecryptCBC

func AesDecryptCBC(encrypted []byte, key []byte) (decrypted []byte, err error)

func AesDecryptCFB

func AesDecryptCFB(encrypted []byte, key []byte) (decrypted []byte, err error)

func AesDecryptECB

func AesDecryptECB(encrypted []byte, key []byte) (decrypted []byte, err error)

func AesEncryptCBC

func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte, err error)

=================== CBC(密码分组链接模式) ======================

func AesEncryptCFB

func AesEncryptCFB(origData []byte, key []byte) (encrypted []byte, err error)

=================== CFB(密码反馈模式) ======================

func AesEncryptECB

func AesEncryptECB(origData []byte, key []byte) (encrypted []byte, err error)

=================== ECB(电码本模式) ======================

func AmountDecimal

func AmountDecimal(amount string, maxDecimals uint) string

@title: 金额精度 @param: amount(金额。如:4.8436712000000) @param: maxDecimals(小数位数) @return: string @description: @date: 2024/6/11 22:35

func Base32Decode

func Base32Decode(s string) ([]byte, error)

@title: base32解密 @param: []byte @return: []byte, error @description: @date: 2024/6/11 22:32

func Base32Encode

func Base32Encode(src []byte) string

@title: base32加密 @param: []byte @return: string @description: @date: 2024/6/11 22:32

func BinarySearch

func BinarySearch(nums []int, val int) int

@title: 二分查找法 @param: nums:数组 @return: int @description: 二分查找的基础是先做排序,然后做二分查找 @date: 2024/6/11 22:32

func BubbleSort

func BubbleSort(nums []int)

@title: 冒泡排序 @param: nums:数组 @return: @description: @date: 2024/6/11 22:32

func BytesToFloat32

func BytesToFloat32(bytes []byte) float32

@title: []byte转float32 @param: []byte @return: float32 @description: @date: 2024/6/11 22:32

func BytesToFloat64

func BytesToFloat64(bytes []byte) float64

@title: []byte转float64 @param: []byte @return: float64 @description: @date: 2024/6/11 22:32

func BytesToIoReader

func BytesToIoReader(b []byte) io.Reader

@title: []byte转io.Reader @param: []byte @return: io.Reader @description: 接受一个字节切片 []byte 并将其转换为 io.Reader @date: 2024/6/11 22:32

func CallFun

func CallFun(obj interface{}, funName string, args ...interface{}) []reflect.Value

// @title: 魔法函数(调用某结构体的方法) // @param: obj(结构体对象) // @param: funName(方法名) // @param: args(方法中要传的N个参数) // @return: // @description: 是一个通用函数,用于反射性地调用任何对象上的方法。 // @date: 2022/7/3 21:40

func Chr

func Chr(ascii int32) string

@title: 传ASCII值返回字符 @param: ASCII值(int32) @return: 字符(string) @description: @date: 2024/7/16 19:15

func Copy

func Copy(src interface{}) interface{}

【名称:】深拷贝 【参数:】 【返回:】 【备注:】

func CountDecimalPlaces

func CountDecimalPlaces(val string) int

@title: 获取小数点后的位数 @param: str @return: int @description:(非浮点值、科学计数返回0) @date: 2024/6/11 22:32

func CurrentDateTime

func CurrentDateTime() string

@title: 获取当前标准时间 @param: @return: 标准时间(string) @description: 时间格式:2021-12-30 23:14:07 @date: 2024/6/11 22:32

func DateTimeStrAadNowSub

func DateTimeStrAadNowSub(ts string) (time.Duration, error)

@title: 一个字符串时间与当前时间的时间差 @param: 字符串时间(string) 如:2022-05-22 23:59:59 @return: time.Duration,error @description: 东八时区 @date: 2024/6/11 22:32

func DatetimeToTimestamp

func DatetimeToTimestamp(str string) int64

@title: 标准时间转为时间戳 @param: 标准时间(string) @return: 时间戳(秒)(int64) @description: 如 2018-01-14 21:45:54 转为 1515937554 @date: 2024/6/11 22:32

func DirCopy

func DirCopy(srcPath string, destPath string) error

@title: 目录复制 @param: 拷贝路径(string),目标路径 @return: error @description: @date: 2024/6/11 22:32

func DirCreate

func DirCreate(dirPath string, perm os.FileMode) error

@title: 创建目录 @param: 目录路径(string),权限(os.FileMode) @return: error @description: @date: 2024/6/11 22:32

func DirEndsWithSlash

func DirEndsWithSlash(dirPath string) string

@title: 目录路径斜杠校正并以斜杠结尾 @param: 路径(string) @return: 路径(string) @description: @date: 2024/6/11 22:32

func DirIsExist

func DirIsExist(dirPath string) (bool, error)

@title: 目录是否存在 @param: 路径(string) @return: 布尔, error @description: @date: 2024/6/11 22:32

func Explode

func Explode(separator, str string) []string

@title: 字符串打散为数组 @param: 分割字符串(string),要分割的字符串(string) @return: 数组(map[int]string) @description: @date: 2024/7/16 19:15

func FibonacciFind

func FibonacciFind(n int) int

@title: 斐波拉契数列-迭代法 @param: n:想要计算的斐波那契数列中的第 n 个数 @return: int @description: 找出第n位数是什么,时间复杂度是n方 @date: 2024/6/11 22:32

func FibonacciRecursion

func FibonacciRecursion(n int) int

@title: 斐波拉契数列-递归方法 @param: n:想要计算的斐波那契数列中的第 n 个数 @return: int @description: 找出第n位数是什么,时间复杂度是n方 @date: 2024/6/11 22:32

func FileCopy

func FileCopy(srcPath, destPath string) error

@title: 文件复制 @param: 文件路径(string)、目标路径(string) @return: error @description: @date: 2024/6/11 22:32

func FileGetContents

func FileGetContents(filePath string) ([]byte, error)

@title: 获取文件内容 @param: 路径(string) @return: 文件流([]byte), error @description: @date: 2024/6/11 22:32

func FileIsExist

func FileIsExist(filePath string) (bool, error)

@title: 文件是否存在 @param: 文件路径(string) @return: 布尔 @description: @date: 2024/6/11 22:32

func FilePutContents

func FilePutContents(filePath string, content string) error

@title: 文件写入内容 @param: 路径(string),内容(string) @return: error @description: @date: 2024/6/11 22:32

func Float32ToByte

func Float32ToByte(float32 float32) []byte

@title: float32转byte @param: float32 @return: []byte @description: @date: 2024/6/11 22:32

func Float32ToInt

func Float32ToInt(float32 float32) int

@title: float32转int @param: float32 @return: int @description: @date: 2024/6/11 22:32

func Float32ToInt64

func Float32ToInt64(float32 float32) int64

@title: float32转int64 @param: float32 @return: int64 @description: @date: 2024/6/11 22:32

func Float64Decimal

func Float64Decimal(f float64) int

@title: float64小数位数 @param: float64 @return: int @description: @date: 2024/6/11 22:32

func Float64ToByte

func Float64ToByte(float64 float64) []byte

@title: float64转byte @param: float64 @return: []byte @description: @date: 2024/6/11 22:32

func Float64ToInt

func Float64ToInt(f float64) int

@title: float64转int @param: float64 @return: int @description: @date: 2024/6/11 22:32

func Float64ToInt64

func Float64ToInt64(f float64) int64

@title: float64转int64 @param: float64 @return: int64 @description: @date: 2024/6/11 22:32

func Float64ToStr

func Float64ToStr(f float64) string

@title: float64转string @param: float @return: string @description: @date: 2024/6/11 22:32

func GetEnv

func GetEnv(key string) (string, bool)

【名称:】获取环境变量值 【参数:】 【返回:】 【备注:】

func GetImportPackagePath

func GetImportPackagePath(packagePath string, version string) string

【名称:】获取导入包的绝对路径 【参数:】包路由(string),版本号 【返回:】包的绝对地址 【备注:】

func GetSometimeApartNDaysTimeFormat

func GetSometimeApartNDaysTimeFormat(t time.Time, days int, format string) string

@title: 获取某个时间起,第N天内的时间(指定日期格式) @param: t:某个时间 @param: days:相隔N天 @param: format:日期格式(如:2006-01-02 15:04:05) @return: string @description: 可以用来获取明天、昨天日期 @date: 2024/6/11 22:32

func GetSometimeApartNDaysTimes

func GetSometimeApartNDaysTimes(t time.Time, days int, dayN int, SameDay bool) []time.Time

@title: 获取某个时间起,N天内的连续的数字格式日期 @param: t:某个时间 @param: days:相隔N天 @param: dayN:取多少天 @param: SameDay:当天是否在内 @return: []time.Time @description: 返回格式如 [20240718 20240719 20240720 20240721 20240722 20240723 20240724] @date: 2024/6/11 22:32

func GetSometimeApartNDaysTimesFormat

func GetSometimeApartNDaysTimesFormat(t time.Time, days int, dayN int, SameDay bool, format string) []string

@title: 获取某个时间起,N天内的连续的时间(指定日期格式) @param: t:某个时间 @param: days:相隔N天 @param: dayN:取多少天 @param: SameDay:当天是否在内 @param: format:日期格式(如:2006-01-02 15:04:05) @return: []time.Time @description: @date: 2024/6/11 22:32

func GetType

func GetType(variable interface{}) string

【名称:】获取变量类型 【参数:】变量(interface) 【返回:】类型名(string) 【备注:】

func Implode

func Implode(separator string, arr interface{}) string

@title: 数组分割为字符串 @param: 分割符(string),数组([]interface) @return: 字符串(string) @description: 参数arr必须为字符串类型的一维数组 @date: 2024/6/11 22:32

func Int64IsEven

func Int64IsEven(i int64) bool

@title: 判断Int64是否是偶数 @param: int64 @return: bool @description: @date: 2024/6/11 22:32

func Int64IsOdd

func Int64IsOdd(num int64) bool

@title: 判断Int64是否是奇数 @param: int64 @return: bool @description: @date: 2024/6/11 22:32

func Int64ToInt

func Int64ToInt(i int64) int

@title: int64转int @param: int64 @return: int @description: @date: 2024/6/11 22:32

func Int64ToStr

func Int64ToStr(i int64) string

@title: int64转string @param: int64 @return: string @description: @date: 2024/6/11 22:32

func IntIsEven

func IntIsEven(i int) bool

@title: 判断Int是否是偶数 @param: int @return: bool @description: @date: 2024/6/11 22:32

func IntIsOdd

func IntIsOdd(i int) bool

@title: 判断Int是否是奇数 @param: int @return: bool @description: @date: 2024/6/11 22:32

func IntToFloat64

func IntToFloat64(i int) float64

@title: int转float64 @param: int @return: float64 @description: @date: 2024/6/11 22:32

func IntToInt64

func IntToInt64(i int) int64

@title: int转int64 @param: int @return: int64 @description: @date: 2024/6/11 22:32

func IntToStr

func IntToStr(i int) string

@title: int转字符 @param: int @return: string @description: @date: 2024/6/11 22:32

func InterfaceIsPtr

func InterfaceIsPtr(val interface{}) bool

@title: Interface是否是指针 @param: interface @return: bool @description: @date: 2024/7/7 16:45

func InterfaceIsStruct

func InterfaceIsStruct(val interface{}) bool

@title: Interface是否是结构体 @param: interface @return: bool @description: @date: 2024/7/7 16:45

func InterfaceToFloat64

func InterfaceToFloat64(val interface{}) (float64, error)

@title: Interface转换float64 @param: val(interface) @return: float64, error @description: @date: 2022/7/3 21:40

func InterfaceToInt64

func InterfaceToInt64(val interface{}) (int64, error)

@title: Interface转int64 @param: val(interface) @return: int64, error @description: @date: 2022/7/3 21:40

func InterfaceToStr

func InterfaceToStr(val interface{}) (string, error)

@title: Interface转换string @param: val(interface) @return: string @description: @date: 2022/7/3 21:40

func IoReader

func IoReader(b []byte) io.Reader

@title: 获取io.Reader @param: @return: *bytes.Buffer @description: @date: 2022/7/3 21:40

func IoReaderToBytes

func IoReaderToBytes(reader io.Reader) []byte

@title: io.Reader转[]byte @param: io.Reader @return: []byte @description: @date: 2022/7/3 21:40

func IoWriter

func IoWriter() *bytes.Buffer

@title: 获取io.Writer @param: @return: *bytes.Buffer @description: @date: 2022/7/3 21:40

func IsArray

func IsArray(val interface{}) bool

@title: 是否是数组 @param: interface @return: true/false(bool) @description: @date: 2024/6/11 22:32

func IsBool

func IsBool(variable interface{}) bool

@title: 变量是否布尔类型 @param: 变量(interface) @return: true/false(bool) @description: @date: 2022/7/3 21:40

func IsEmail

func IsEmail(email string) bool

@title: 是否邮箱 @param: 邮箱(string) @return: true/false(bool) @description: @date: 2022/7/3 21:16

func IsFloat

func IsFloat(variable interface{}) bool

@title: 变量是否浮点类型 @param: 变量(interface) @return: true/false(bool) @description: @date: 2024/6/11 22:32

func IsInString

func IsInString(target string, strs string) bool

@title: 某字符是否存在字符串中 @param: 某字符(string),字符串(string) @return: bool @description: @date: 2024/7/16 19:15

func IsInt

func IsInt(variable interface{}) bool

@title: 是否是int相关类型 @param: interface @return: bool @description: @date: 2024/6/11 22:32

func IsMobile

func IsMobile(mobile string) bool

@title: 是否手机号 @param: 手机号(string) @return: true/false(bool) @description: @date: 2022/7/3 21:10

func IsNumeric

func IsNumeric(variable interface{}) bool

@title: 是否是数字类型 @param: interface @return: bool @description: @date: 2024/6/11 22:32

func IsScientificNotation

func IsScientificNotation(s string) bool

@title: 是否是科学计数 @param: str(科学计数。如:"4.843671275939215e+21") @return: bool @description: @date: 2024/6/11 22:30

func IsSlice

func IsSlice(val interface{}) bool

@title: 是否是切片 @param: interface @return: true/false(bool) @description: @date: 2024/6/11 22:32

func IsString

func IsString(val interface{}) bool

@title: 是否是字符类型 @param: @return: bool @description: @date: 2024/7/16 19:15

func JsonToMap

func JsonToMap(b []byte) (map[string]interface{}, error)

@title: json转map @param: b([]byte) @return: map[string]interface{} @return: error @description: 解决JSON格式的数据反序列化为map[string]interface{}时,数字变成科学计数法表示的浮点数问题 @date: 2024/7/7 17:00

func Lcfirst

func Lcfirst(str string) string

@title: 字符串首字母转成小写 @param: 字符串(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func ListDirFiles

func ListDirFiles(dirPath string) ([]string, error)

@title: 列出指定目录的所有文件及目录 @param: dirPath(目录路径) @return: []string @return: error @description: @date: 2024/7/7 17:00

func LocAmericaLosAngeles

func LocAmericaLosAngeles() *time.Location

@title: 获取时区-西八区(洛杉矶) @param: @return: *time.Location @description: @date: 2024/6/11 22:32

func LocAsiaShanghai

func LocAsiaShanghai() *time.Location

@title: 获取时区-东八区(中国上海) @param: @return: *time.Location @description: @date: 2024/6/11 22:32

func LocUTC

func LocUTC() *time.Location

@title: 获取时区-0时区 @param: @return: *time.Location @description: @date: 2024/6/11 22:32

func Ltrim

func Ltrim(str, charlist string) string

@title: 移除字符串左侧的字符 @param: 字符串(string),要移除的字符(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func MapToJson

func MapToJson(param map[string]interface{}) string

@title: map转json @param: map[string]interface{} @return: string @return: error @description: 解决JSON格式的数据反序列化为map[string]interface{}时,数字变成科学计数法表示的浮点数问题 @date: 2024/7/7 17:00

func MbStrLen

func MbStrLen(str string) int

@title: 获取字符串中字符的数量 @param: 字符串(string) @return: 数量(int) @description: @date: 2024/7/16 19:15

func Md5

func Md5(src string) string

@title: Md5加密 @param: string @return: string @description: @date: 2024/6/11 22:32

func Millisecond

func Millisecond() int64

@title: 获取时间戳(毫秒) @param: @return: 时间戳(int64) @description: @date: 2024/6/11 22:32

func MobileStar

func MobileStar(mobile string) string

@title: 手机号*号处理 @param: 手机号(string) @return: 加*号的手机号(string) @description: 非手机号则直接返回原字符 @date: 2022/7/3 21:13

func Ord

func Ord(str string) int

@title: 返回字符串中第一个字符的 ASCII 值 @param: 字符串(string) @return: ASCII值(int) @description: @date: 2024/7/16 19:15

func QuickSort

func QuickSort(nums []int, left, right int)

@title: 快速排序 @param: nums:数组 @return: @description: left 和 right 的边界条件,如果 left 大于等于 right,则无需排序。 @date: 2024/6/11 22:32

func RandString

func RandString(n int) string

@title: 生成N个随机字符 @param: 个数(int) @return: 字符串(string) @description: a-z,A-Z,0-9 @date: 2022/7/3 21:07

func RemoveAllZerosFromLastDecimal

func RemoveAllZerosFromLastDecimal(amount string) string

@title: 移出小数点后无效的数 @param: amount(金额。如:4.8436712000000) @return: string @description: @date: 2024/6/1 10:21

func RetainDecimalPlaces

func RetainDecimalPlaces(amount string, precision uint) (string, error)

@title: 保留n位小数 @param: amount 金额 @param: precision 要保留多少位小数 @return: int @description: @date: 2024/6/11 22:34

func Rfc3339ToDatetime

func Rfc3339ToDatetime(str string) string

@title: Rfc3339格式时间转为正常时间 @param: Rfc3339时间字符(string) @return: 时间字符串(string) @description: 如 2018-01-14T21:45:54+08:00 转为 2018-01-14 21:45:54 @date: 2024/6/11 22:32

func RsaSha1Sign

func RsaSha1Sign(originalData string, RsaPrivateKey string) (sign []byte, err error)

func RsaSha1Verify

func RsaSha1Verify(signatureStr, signStr, RsaPublickey string) (bool, error)

*RSA验签

  • $originalData待签名数据(需要先排序,然后拼接)
  • $sign需要验签的签名,需要base64_decode解码
  • 验签用支付公钥
  • return 验签是否通过 bool值

func Rtrim

func Rtrim(str, substr string) string

@title: 移除字符串右侧的字符 @param: 字符串(string),要移除的字符(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func ScientificNotationToStrings

func ScientificNotationToStrings(val string, decimalPlaces uint) (string, error)

@title: 将科学计数转换为字符串数字 @param: val(科学计数。如:4.843671275939215e+21) @param: decimalPlaces(精度,小数点位数) @return: string, error @description: @date: 2024/6/1 10:21

func ServeIp

func ServeIp() (ip string)

@title: 获取服务器端IP @param: @return: string @description: @date: 2024/6/11 22:32

func SetEnv

func SetEnv(key string, val string) error

【名称:】设置环境变量值 【参数:】 【返回:】 【备注:】

func Sha1

func Sha1(str string) string

@title: sha1加密 @param: string @return: string @description: @date: 2024/6/11 22:32

func Sha256

func Sha256(str string) string

@title: Sha256加密 @param: string @return: string @description: @date: 2024/6/11 22:32

func Sha512

func Sha512(src string) string

@title: Sha512加密 @param: string @return: string @description: @date: 2024/6/11 22:32

func Shuffle

func Shuffle(arr []int)

@title: 洗牌算法 @param: nums:数组 @return: @description: @date: 2024/6/11 22:32

func Snowflake

func Snowflake(workerId int64) (*snowflakeWorker, error)

@title: 创建雪花算法节点 @param: int64 @return: *snowflakeWorker, error @description: @date: 2024/6/11 22:32

func SortingSplicing

func SortingSplicing(params map[string]interface{}) string

对签名数据排序、拼接

func StrIsFloat

func StrIsFloat(val string) bool

@title: string是否是浮点 @param: 字符串(str) @return: bool @description: @date: 2024/7/16 19:15

func StrIsInArr

func StrIsInArr(target string, str_array []string) bool

@title: 某字符串是否存在数组中 @param: 字符(string),数组(array) @return: 布尔(bool) @description: @date: 2022/7/3 21:33

func StrRepeat

func StrRepeat(input string, multiplier int) string

@title: 指定字符串重复N次 @param: 字符串(string),次数(int) @return: 字符(string) @description: @date: 2024/7/16 19:15

func StrReplace

func StrReplace(strs string, oldStr string, newStr string) string

@title: 字符替换 @param: 要替换的字符串(string),旧字符(string),新字符(string) @return: string @description: @date: 2022/7/4 22:14

func StrToBigFloat

func StrToBigFloat(str string) (*big.Float, bool)

@title: string转*big.Float @param: 字符串(str) @return: *big.Float, bool @description: @date: 2022/7/3 21:31

func StrToBigInt

func StrToBigInt(str string, exp int64) (*big.Int, bool)

@title: string转*big.Int @param: (字符)string,(精度位)int64 @return: *big.Int, bool @description: @auth: 技术狼 @date: 2022/7/3 21:00

func StrToFloat64

func StrToFloat64(val string) (float64, error)

@title: string转Float64 @param: 字符串(str) @return: float64, error @description: @date: 2022/7/3 21:29

func StrToInt

func StrToInt(val string) (int, error)

@title: string转int @param: 字符串(str) @return: int, error @description: @date: 2022/7/3 21:18

func StrToInt64

func StrToInt64(val string) (int64, error)

@title: string转int64 @param: 字符串(str) @return: int64,error @description: @date: 2022/7/3 21:25

func StrToLower

func StrToLower(str string) string

@title: 字符串全转小写 @param: 字符串(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func StrToUint64

func StrToUint64(val string) (uint64, error)

@title: string转uint64 @param: 字符串(str) @return: uint64,error @description: @date: 2022/7/3 21:28

func StrToUpper

func StrToUpper(str string) string

@title: 字符串全转大写 @param: 字符串(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func StructToArr

func StructToArr(data interface{}) []map[string]interface{}

func TimeStampSecond

func TimeStampSecond() int64

@title: 获取当前时间戳(秒) @param: @return: 时间戳(int64) @description: @date: 2024/6/11 22:32

func TimestampToDate

func TimestampToDate(timestamp int64, loc *time.Location) string

@title: 时间戳转日期 @param: int64,*time.Location @return: string @description: 输出日期格式(2006-01-02) @date: 2024/6/11 22:32

func TimestampToDateNumber

func TimestampToDateNumber(timestamp int64, loc *time.Location) string

@title: 时间戳转数字格式日期字符 @param: int64,*time.Location @return: string @description: 输出日期格式(20060102) @date: 2024/6/11 22:32

func TimestampToDatetime

func TimestampToDatetime(timestamp int64) string

@title: 时间戳转为标准时间 @param: 时间戳(int64) @return: 标准时间(string) @description: 如 1515937554 转为 2018-01-14 21:45:54 @date: 2024/6/11 22:32

func Trim

func Trim(str, charlist string) string

@title: 移除字符串两侧的字符 @param: 字符串(string),要移除的字符(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func TrimAll

func TrimAll(str string) string

@title: 去除全部空格 @param: 字符串(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func Ucfirst

func Ucfirst(str string) string

@title: 字符串首字母转成大写 @param: 字符串(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func Ucword

func Ucword(str string) string

@title: 每个单词的首字符转换为大写 @param: 字符串(string) @return: 字符串(string) @description: @date: 2024/7/16 19:15

func UnsafeBytesToString

func UnsafeBytesToString(bytes []byte) string

@title: 将字节切片转换为字符串 @param: []byte @return: string @description: 不安全的[]byte转string @date: 2024/6/11 22:32

func UrlDomain

func UrlDomain(link string) string

@title: 获取URL主域名 @param: string @return: string @description: @date: 2024/6/11 22:32

Types

type FileInfo

type FileInfo struct {
	Name    string    `json:"name"`     // 文件名
	Suffix  string    `json:"suffix"`   // 后缀
	Path    string    `json:"path"`     // 文件路径
	Size    int64     `json:"size"`     // 文件大小
	ModTime time.Time `json:"mod_time"` // 修改时间
}

func DirFilesBySuffix

func DirFilesBySuffix(dir string, suffix string) ([]FileInfo, error)

@title: 获取某目录指定后缀的所有文件 @param: 目录路径(string),后缀(string) @return: 文件信息数组,错误信息 @description: @date: 2024/6/11 22:32

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL