1 Star 0 Fork 0

杨文 / golang_tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

golang_tools

介绍

golang工具库

supervalue 通用数据结构,基本支持golang的所有数据结构,提供大量快速处理数据的方法,支持json字符串解析为supervalue
sqlpase    基于supervalue,目标是通过配置或特定的字符串将参数自动转化为sql条件语句,并是实现sql的执行和字段的快速映射

软件架构

软件架构说明

使用说明

supervalue

//创建数组

	a := NewSVArray()
	//默认所有向数组添加的元素的方法会将当前的数据类型转变为数组
	//顺序添加元素
	a.ArrayAppendValue("abc")
	//批量添加
	a.ArrayAppendValues("abc", 123, &[]interface{}{1, 2, "efg"}, struct {
		Ts int
	}{1}, map[int]string{1: "aaa"})
	//fmt.Println(a)
	//按下标添加
	a.SetIndexValue(0, "mn")
	//fmt.Println(a)
	//对象数组或字符串的长度
	fmt.Println(a.Length())
	//获取下标元素
	s := a.ValueByIndex(0)
	fmt.Println("s的值:", s)
	//按类型获取下标元素
	c := a.AsStringByIndex(2, "")
	//或者
	d := a.ValueByIndex(2).String()
	fmt.Println("c的值:", c, "d的值:", d)
	//按浮点型根据指定精度获取下标元素
	//四舍五入保留一位小数
	a.ValueByIndex(2).Round(1)
	//向下取整保留小数点前1位
	a.ValueByIndex(2).Ceil(-1)
	//向上取整保留小数点前一位
	a.ValueByIndex(2).Floor(-1)
	//判断元素是否与supervalue等价,可比较复合类型
	res := a.ValueByIndex(4).IsEquaEx(map[string]int{"Ts": 1})
	fmt.Println(res)
	//查找元素在数组中的位置不论层级,不存在时返回nil
	aa := a.SearchFilesEX("efg")
	//fmt.Println(aa)
	//返回当前元素的上级,不存在时返回nil
	fmt.Println(aa.Super())
	//直接给当前元素赋值,当前元素会根据变量自动转化类型
	aa.Super().SetValue(123)
	fmt.Println(a)
	//将supervalue转化为基本数据结构 map,array和基本数据类型
	fmt.Println(a.Interface())
	//移除下标元素
	fmt.Println(a.RemoveIndexFile(0))
	//获取子切片
	fmt.Println(a.Child(0, 2))

//创建对象

a := NewSVObject()
	//创建对象的同时添加元素
	a = NewSVObjByKeyValues("ef", 1234, "abc", "222")
	//向对象中添加元素
	a.SetKeyValue("a", 123)
	//移除键值对
	a.RemoveFiles("a")
	//批量添加
	a.SetKeyValues("a", 123, "e", []string{"123", "456", "345"})
	//修改对象键值的名称
	a.ChangValueName(func(m map[string]string) {
		m["ef"] = "1"
		m["abc"] = "2"
	})
	fmt.Println(a)
	//按键值获取对象
	a.ValueByName("1")
	//按指定类型获取键值
	a.StringByName("1", "")
	//查找元素在对象中的位置
	s := a.SearchKeysEx("1", 1234)
	fmt.Println(s, s.Super())
	//获取数组或对象中第一个元素和最后一个元素
	fmt.Println(a.GetFirstValue(), a.GetLastValue())
	//检查指定的键值是否存,不存在时可以创建
	a.CheckKeysExists("2;3", func(s string) interface{} {
		fmt.Println(s)
		return nil
	})

//其他

a := NewSVArray().SetValue([]interface{}{"-4", "9", "1", 2, "3", 4.5, 4.5, 2, "3"})
	//合并一个数组或对象
	a.Merge([]string{"90", "10"})
	//去重,对复合类型同样适用
	fmt.Println(a.DedupArry())
	//遍历数组或对象
	a.Range(func(key string, val *SuperValue) bool {
		fmt.Println(val)
		return true
	})
	//指定条件获取数组最大值和最小值
	fmt.Println(a.Max(0, func(f float64) bool {
		if f > 3 {
			return false
		}
		return true
	}), a.Min(0, func(f float64) bool {
		if f < 2 {
			return false
		}
		return true
	}))
	//求和,平均
	fmt.Println(a.Total(), a.Average())
	//按指定条件过滤数组或对象数据求和
	fmt.Println(a.TotalByFilterSV(func(s string, value *SuperValue) bool {
		if value.Int() > 1 {
			return true
		}
		return false
	}))
	//数组或对象排序,过滤
	fmt.Println(a.Sort(func(key1, key2 string, val1, val2 SuperValue) bool {
		return val1.Float64() < val2.Float64()
	}).Filter(func(key string, val *SuperValue) bool {
		if val.Float64() > 0 {
			return true
		}
		return false
	}))

//json解析

	str := `{
    "code": 0,
    "data": [
        {
            "fid": "01\u53F7\u670D",
            "fe": "nan",
            "fn": "nan",
            "fu": "nan"
        },
        {
            "fid": "01\u53F7\u670D",
            "fe": "nan",
            "fn": "nan",
            "fu": "nan"
        },
        {
            "fid": "01\u53F7\u670D",
            "fe": "nan",
            "fn": "nan",
            "fu": "nan"
        },
        {
            "fid": "01\u53F7\u670D",
            "fe": "nan",
            "fn": "nan",
            "fu": "nan"
        },
        {
            "fid": "01\u53F7\u670D",
            "fe": "nan",
            "fn": "nan",
            "fu": "nan"
        },
        {
            "fid": "01\u53F7\u670D",
            "fe": "nan",
            "fn": "nan",
            "fu": "nan"
        }
    ],
    "total": 9615
}`
	a := NewSVArray()
	err := a.JsonParseFromByteEX([]byte(str))
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	//fmt.Println(a)
	as, _ := a.ValueByName("data").DivKDatas("fid,fe", "_", -1, -1)
	fmt.Println(as)

sqlparse

	str := `{
		"a":[1,3,4,5],
		"b":"",
		"c":"c,c,c",
		"d":[],
		"e":[1,2,34,4]
	   }`
	data := NewSVArray()
	data.JsonParseFromByteEX([]byte(str))
	stl := NewSqlParse(data)
	/*
	   语法解析器   注意函数的所有小()变为{} 默认排除所有空字符串
	   ! % ^abc  [,1] >=< :func{} %    结束符号[&,|,(,)]|$
	   取反 前端模糊匹配 字段值 连接符号 数据库字段名称 [数组转化方式 下标]
	*/
	stl.Table(func(tb *SqlParse) {
		tb.Table("efg").Select("*").Set("id=?", nil, 1)
	}, "asg").Select().SetStrCondition("(!a%&b)|(c[,0]|!e[1]>=:replace{id,'a',''})*1")
	fmt.Println(stl.Res(false))
	// 转化sql: select a,b,c,d,e from ( select * from efg   where id=? ) asg  where (  a not like ? and a not like ? and a not like ? and a not like ? ) or  (   c  = ?  or   replace{id,'a',''})*1  <= ?   )
	// 占位参数: [1 1% 3% 4% 5% c 2]
	stl.Clear()
	//或者
	stl.Table(func(tb *SqlParse) {
		tb.Table("efg").Select("*").Set("id=?", nil, 1)
	}, "asg").Select().Bracket(func(t *SqlParse) {
		t.Set("a", &ParamsConfig{
			Negate:   true,
			SufMatch: true,
			Ignore:   true,
			Index:    -1,
		}).AndSet("b", NewParamsConfig())
	}).OrBracket(func(t *SqlParse) {
		t.Set("c", &ParamsConfig{
			Index:  0,
			Split:  []string{","},
			Ignore: true,
		}).OrSet("e", &ParamsConfig{
			Negate: true,
			Index:  1,
			DBName: " replace{id,'a',''})*1",
		})
	})
	fmt.Print(stl.Res(false))
	//测试
		str1 := `{
    "fid":"1111",
    "fpass":"9999"
}`
	data1 := NewSVArray()
	data1.JsonParseFromByteEX([]byte(str1))
	sel := NewSqlParse(data1).ConfigDBCon("mysql", "supportAdmin:Kpl#2023!@tcp(xxxxx:xxxx)/xxxxxx?charset=utf8&parseTime=true&loc=Local")
	defer sel.Close()
	res := sel.Table("gnss_data").Select("fname,fpassword").Limit("1").OrderBy("fname desc").GroupBy("fname,fpassword").Exec()
	fmt.Println(res.ReName("fname", "name").Fileter("fpassword").MapFiles()) //修改字段名称,过滤字段,映射查询结果
	fmt.Println(res.Row())    //根据sql的类型结果不同,select 返回结果为数据的总数量,其他返回影响行数

文本编辑功能

	a := NewTXSave("ax")
	a.Write("abc.txt",[]map[string]int{{"aa":1,"bb":2,"cc":3},{"aa":12,"bb":22,"cc":32}})
	a.RemoveKeyValues("abc.txt", func(s string, value *SuperValue) bool {
	if value.StringByName("aa","")=="1"{
		return true
	}
		return false
	})
	a.ReadByFunc("satc2327923279.SIS", func(str string) []string {
		l := strings.Split(str, " ")
		var res []string
		for _, v := range l {
			if v != "" {
				res = append(res, v)
			}
		}
		return res
	}, func(line int, str string) []string {
		l := strings.Split(str, " ")
		var res []string
		for _, v := range l {
			if v != "" {
				res = append(res, v)
			}

		}
		return append([]string{res[0] + " " + res[1]}, res[2:]...)
	})
	fmt.Println(a.ReadFile.File)

空文件

简介

golang工具库,包含一些常用的数据处理方法,一个万能的数据结构和基于该结构的众多方法 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/yw-seventy-seven/golang_tools.git
git@gitee.com:yw-seventy-seven/golang_tools.git
yw-seventy-seven
golang_tools
golang_tools
master

搜索帮助