diff --git a/MainTest.go b/MainTest.go index e05dbfa..590cb10 100644 --- a/MainTest.go +++ b/MainTest.go @@ -7,23 +7,27 @@ package main import ( - "Go-Tool/util" "Go-Tool/util/reflectM" "fmt" + "math" "reflect" ) func main() { - fmt.Println(util.Crc32Mode("ewqeqweqw", 4)) - fmt.Println(util.Crc32Mode("sdasdsa", 4)) - fmt.Println(util.Crc32Mode("dasdsadasdas", 4)) - fmt.Println(util.Crc32Mode("321321312", 4)) - fmt.Println(util.Crc32Mode("dsadas", 4)) - fmt.Println(util.Crc32Mode("dasd23132131", 4)) - fmt.Println(util.Crc32Mode("eqwewqewqd4312312", 4)) - fmt.Println(util.Crc32Mode("3123213dasdasdas", 4)) - fmt.Println(util.Crc32Mode("312321dfdsfsdg", 4)) - fmt.Println(util.Crc32Mode("ewqrewrqwe", 4)) + //fmt.Println(util.Crc32Mode("ewqeqweqw", 4)) + //fmt.Println(util.Crc32Mode("sdasdsa", 4)) + //fmt.Println(util.Crc32Mode("dasdsadasdas", 4)) + //fmt.Println(util.Crc32Mode("321321312", 4)) + //fmt.Println(util.Crc32Mode("dsadas", 4)) + //fmt.Println(util.Crc32Mode("dasd23132131", 4)) + //fmt.Println(util.Crc32Mode("eqwewqewqd4312312", 4)) + //fmt.Println(util.Crc32Mode("3123213dasdasdas", 4)) + //fmt.Println(util.Crc32Mode("312321dfdsfsdg", 4)) + //fmt.Println(util.Crc32Mode("ewqrewrqwe", 4)) + fmt.Println(int(math.Ceil(1.1))) + fmt.Println(int(math.Ceil(1.6))) + fmt.Println(int(math.Floor(1.1))) + fmt.Println(int(math.Floor(1.6))) //testReflect() } diff --git a/ProgressTest/DataInit.go b/ProgressTest/DataInit.go new file mode 100644 index 0000000..50284a8 --- /dev/null +++ b/ProgressTest/DataInit.go @@ -0,0 +1,29 @@ +/* + * @Author : huangzj + * @Time : 2020/11/13 14:55 + * @Description: + */ + +package ProgressTest + +import ( + "Go-Tool/util/file" + "Go-Tool/util/jsonEnhance" +) + +type DeliverList struct { + Deliver []*Deliver +} + +type Deliver struct { + Score int + AllScore int + Id int +} + +func MakeData() DeliverList { + var deliver DeliverList + content, _ := file.ReadJsonFile("F:\\Go_BySelf\\src\\Go-Tool\\ProgressTest\\deliverData.json") + jsonEnhance.UnmarshalFromString(content, &deliver) + return deliver +} diff --git a/ProgressTest/DeliverRule2_test.go b/ProgressTest/DeliverRule2_test.go new file mode 100644 index 0000000..cbe40d2 --- /dev/null +++ b/ProgressTest/DeliverRule2_test.go @@ -0,0 +1,140 @@ +/* + * @Author : huangzj + * @Time : 2020/11/16 14:44 + * @Description: + */ + +package ProgressTest + +import ( + "Go-Tool/util/rand" + "fmt" + "math" + "testing" +) + +const ( + MinGroupNum = 10 + MaxGroupNum = 80 +) + +//需求(直接举例): +//总共有100个数据,两个变量,大区间(MaxGroupNum) 为80, 小区间(MinGroupNum)为 10 || 100 和 80 对应的参数 都必须是10的倍数 +//第一步:先100个数据排序,然后按照80进行划分。 +//第二步:100划分剩余的数据组成一组 +//第三步:80个数组再一次排序,按照 10 * 4 进行划分,可以分成两组 +//第四步:40每组的数据,要分成最后的10 * 4 的4组,按照每次取前5再随机取5个组成一组的方式组成4组 +//第五步:不足4组的,按照取前5和随机5个的方式进行分组 +func TestDeliver2(t *testing.T) { + + firstOrderRule = FirstOrderRule + secondOrderRule = SecondOrderRule + thirdOrderRule = ThirdOrderRule + + list := MakeData() //创建数据 + resultList := deliver2(list.Deliver) //进行分组操作 + fmt.Printf(fmt.Sprintf("%v", resultList)) +} + +func deliver2(delivers []*Deliver) [][]int { + + resultList := make([][]int, 0) + newDelivers := make([]*Deliver, 0) + //获得第一次按照大区间分组后剩下的元素数量、第一次分组所有组、分到的大组数量 + leaveNum, partitions, partition := FirstOrder(delivers, newDelivers) + + resultList = withCompletePartition(partitions, resultList) //对完整的分组进行处理 + resultList = withLeavePartition(resultList, newDelivers, leaveNum, partition) //对剩余的分组进行处理 + return resultList +} + +func withLeavePartition(resultList [][]int, newDelivers []*Deliver, leaveNum int, partition int) [][]int { + if leaveNum != 0 { + leaveList := newDelivers[partition*MaxGroupNum:] + resultList = secondOrder(leaveList, resultList, leaveNum) + } + return resultList +} + +func withCompletePartition(partitions [][]*Deliver, resultList [][]int) [][]int { + for _, partition := range partitions { + resultList = secondOrder(partition, resultList, len(partition)) + } + return resultList +} + +func FirstOrder(delivers []*Deliver, newDelivers []*Deliver) (int, [][]*Deliver, int) { + newDelivers = firstOrderRule(delivers) //第一次排序 + partition := len(newDelivers) / MaxGroupNum + leaveNum := len(newDelivers) % MaxGroupNum + partitions := make([][]*Deliver, 0) + + for i := 0; i < partition; i++ { + partitions = append(partitions, newDelivers[i*MaxGroupNum:(i+1)*MaxGroupNum]) + } + return leaveNum, partitions, partition +} + +func secondOrder(delivers []*Deliver, resultList [][]int, listNum int) [][]int { + newDelivers := secondOrderRule(delivers) //第二次排序 + + if listNum > 4*MinGroupNum { + fourInOne := listNum / (4 * MinGroupNum) + leave := listNum % (4 * MinGroupNum) + + for i := 0; i < fourInOne; i++ { + resultList = append(resultList, calculateFourInOne(newDelivers[i*4*MinGroupNum:(i+1)*4*MinGroupNum])...) //四倍在一组的计算 + } + + if leave != 0 { + resultList = append(resultList, calculateByLeft(toList(newDelivers[fourInOne*4*MinGroupNum:]))...) + } + } else { + resultList = append(resultList, calculateByLeft(toList(newDelivers))...) + } + return resultList +} + +func toList(deliver []*Deliver) [][]int { + result := make([][]int, 0) + for _, item := range deliver { + result = append(result, []int{item.Score, 1}) + } + return result +} + +func calculateFourInOne(delivers []*Deliver) [][]int { + Ids := thirdOrderRule(delivers) //第三次排序 + result := calculateByLeft(Ids) + return result +} + +func calculateByLeft(leftList [][]int) [][]int { + result := make([][]int, 0) + for len(leftList) != 0 { + newList := make([]int, 0) + thisGroup := getFirstSome(leftList[0 : MinGroupNum/2]) //先拿到前面的几个 + + leftList = leftList[MinGroupNum/2:] + //然后在随机随取后面的几个 + for i := 0; i < int(math.Ceil(MinGroupNum/2)); i++ { + newList, leftList = getFrontAndEnd(leftList) //从前部和后部进行组合数组 + thisGroup = append(thisGroup, newList[0]) + } + + result = append(result, thisGroup) + } + return result +} + +func getFirstSome(list [][]int) []int { + result := make([]int, 0) + for _, item := range list { + result = append(result, item[0]) + } + return result +} + +func getFrontAndEnd(leftList [][]int) ([]int, [][]int) { + return rand.GetAwardByWeightWithLeftAward(leftList) +} diff --git a/ProgressTest/DeliverRule_test.go b/ProgressTest/DeliverRule_test.go new file mode 100644 index 0000000..2da8bb0 --- /dev/null +++ b/ProgressTest/DeliverRule_test.go @@ -0,0 +1,95 @@ +/* + * @Author : huangzj + * @Time : 2020/11/13 12:00 + * @Description:在工程中有一个需求是对 指定数量的数组进行划分,按照每一层的规则分成对应数量,这边做一个测试. + */ + +package ProgressTest + +import ( + "Go-Tool/util/rand" + "fmt" + "github.com/ahmetalpbalkan/go-linq" + "testing" +) + +const ( + oneGroupNum = 4 +) + +// +//未完成 +//需求:有一组结构体【Deliver】,现在需要按照一定的规则把这么多的结构体划分为每组X个元素多组,假设这边X = 10 (前提是Deliver可以整除10) +// 第一次按照Score排序,把Deliver划分为每组 8 * 10个元素的多个数组,不足80的按照一组算(如果分数相同,按照Id自然数排序) +// 第二次按照Id在每个8 * 10的数组中排序,分成 4 * 10 的两个数组 +// 第三次按照AllScore进行排序,把 4 * 10的数组,分成两个2 * 10的数组 +// 第四次在2 * 10的数组中获取前10/2,然后随机在剩下的 2 * 10 - 10/2 的数组中随 10/2 个元素和第一个前五组成一组 +// +// 在第一次划分中,不满8 * 10的数组,按照数组划分往下计算 +// +func TestDeliver(t *testing.T) { + list := MakeData() //创建数据 + deliver(list.Deliver) //进行分组操作 +} + +func deliver(list []*Deliver) { + group := len(list) / (8 * oneGroupNum) //求组数 + //lastNum := len(list) % (8*oneGroupNum) //求最后一组的数量(余数),如果为0则说明除得尽,不需要额外操作 + query := linq.From(list).OrderByDescending(func(i interface{}) interface{} { + return i.(*Deliver).Score + }) + queryList := make([]linq.Query, 0) + queryList2 := make([]linq.Query, 0) + queryList3 := make([]linq.Query, 0) + + //第一个步骤:按照Score排序并划分 + for i := 0; i < group; i++ { + //每次数组的创建都要先去掉前面的8 * 10个元素,再取此时的8*10个元素作为当前组.因为linq没有对应取区间的方法.. + queryList = append(queryList, query.Skip(i*8*oneGroupNum).Take(8*oneGroupNum)) + } + + //第二个步骤:按照Id排序并划分 + for i, item := range queryList { + for j := 0; j < len(queryList[i].Results())/(4*oneGroupNum); j++ { + queryList2 = append(queryList2, item.OrderByDescending(func(result interface{}) interface{} { + return result.(*Deliver).Id + }).Skip(j*4*oneGroupNum).Take(4*oneGroupNum)) + } + fmt.Println() + } + + //第三个步骤:按照AllScore进行排序并划分 + for i, item := range queryList2 { + queryList3 = append(queryList3, item.OrderByDescending(func(i interface{}) interface{} { + return i.(*Deliver).AllScore + }).Skip(i*2*oneGroupNum).Take(2*oneGroupNum)) + } + + for _, item := range queryList3 { + deliver := make([]*Deliver, 0) + fmt.Println(item.Results()) + item.ToSlice(&deliver) + delivers := toIntList(deliver[0 : oneGroupNum/2]) + left := toIntList(deliver[oneGroupNum/2:]) + for i := 0; i < oneGroupNum/2; i++ { + result := make([]int, 0) + result, left = rand.GetAwardByWeightWithLeftAward(left) + delivers = append(delivers, result) + } + fmt.Println(delivers) + fmt.Println(left) + } + + //第四个步骤:排序划分然后进行随机组合. + + fmt.Printf("") + +} + +func toIntList(delivers []*Deliver) [][]int { + list := make([][]int, 0) + for _, item := range delivers { + list = append(list, []int{item.Id, item.AllScore, 1}) + } + return list +} diff --git a/ProgressTest/OrderRule.go b/ProgressTest/OrderRule.go new file mode 100644 index 0000000..798c567 --- /dev/null +++ b/ProgressTest/OrderRule.go @@ -0,0 +1,49 @@ +/* + * @Author : huangzj + * @Time : 2020/11/16 18:00 + * @Description: + */ + +package ProgressTest + +import "github.com/ahmetalpbalkan/go-linq" + +type orderRule = func([]*Deliver) []*Deliver +type intOrderRule = func([]*Deliver) [][]int + +var ( + firstOrderRule orderRule + secondOrderRule orderRule + thirdOrderRule intOrderRule +) + +func FirstOrderRule(delivers []*Deliver) []*Deliver { + var newDelivers []*Deliver + linq.From(delivers).OrderByDescending(func(d interface{}) interface{} { + return d.(*Deliver).Score + }).ToSlice(&newDelivers) + return newDelivers +} + +func SecondOrderRule(delivers []*Deliver) []*Deliver { + newDeliver := make([]*Deliver, 0) + //第二次排序 + linq.From(delivers).OrderByDescending(func(d interface{}) interface{} { + return d.(*Deliver).Score + }).ThenBy(func(d interface{}) interface{} { + return d.(*Deliver).Id + }).ToSlice(&newDeliver) + + return newDeliver +} + +func ThirdOrderRule(delivers []*Deliver) [][]int { + Ids := make([][]int, 0) + //第三次排序 + linq.From(delivers).OrderByDescending(func(d interface{}) interface{} { + return d.(*Deliver).Score + }).Select(func(i interface{}) interface{} { + return []int{i.(*Deliver).Score, 1} + }).ToSlice(&Ids) + return Ids +} diff --git a/ProgressTest/deliverData.json b/ProgressTest/deliverData.json new file mode 100644 index 0000000..fdec2ad --- /dev/null +++ b/ProgressTest/deliverData.json @@ -0,0 +1,504 @@ +{ + "Deliver": [ + { + "Score": 1, + "AllScore": 20000, + "Id": 1 + }, + { + "Score": 23, + "AllScore": 4321423, + "Id": 5 + }, + { + "Score": 19, + "AllScore": 43214, + "Id": 3 + }, + { + "Score": 39, + "AllScore": 41324, + "Id": 12 + }, + { + "Score": 41, + "AllScore": 2314, + "Id": 55 + }, + { + "Score": 42, + "AllScore": 654, + "Id": 23 + }, + { + "Score": 49, + "AllScore": 765, + "Id": 16 + }, + { + "Score": 98, + "AllScore": 7876, + "Id": 57 + }, + { + "Score": 88, + "AllScore": 8909, + "Id": 77 + }, + { + "Score": 77, + "AllScore": 4532, + "Id": 89 + }, + { + "Score": 341, + "AllScore": 356536, + "Id": 24 + }, + { + "Score": 123, + "AllScore": 67456, + "Id": 19 + }, + { + "Score": 67, + "AllScore": 8768, + "Id": 31 + }, + { + "Score": 33, + "AllScore": 457, + "Id": 80 + }, + { + "Score": 32, + "AllScore": 76, + "Id": 98 + }, + { + "Score": 43, + "AllScore": 6787, + "Id": 100 + }, + { + "Score": 45, + "AllScore": 8756, + "Id": 121 + }, + { + "Score": 89, + "AllScore": 98765, + "Id": 114 + }, + { + "Score": 55, + "AllScore": 234, + "Id": 117 + }, + { + "Score": 56, + "AllScore": 8765, + "Id": 135 + }, + { + "Score": 90, + "AllScore": 345, + "Id": 201 + }, + { + "Score": 135, + "AllScore": 456543, + "Id": 331 + }, + { + "Score": 56, + "AllScore": 6354677, + "Id": 156 + }, + { + "Score": 54, + "AllScore": 8765, + "Id": 178 + }, + { + "Score": 34, + "AllScore": 42352, + "Id": 891 + }, + { + "Score": 21, + "AllScore": 24359, + "Id": 444 + }, + { + "Score": 45, + "AllScore": 8735, + "Id": 333 + }, + { + "Score": 23, + "AllScore": 68477, + "Id": 251 + }, + { + "Score": 47, + "AllScore": 847645, + "Id": 1 + }, + { + "Score": 69, + "AllScore": 76536, + "Id": 1455 + }, + { + "Score": 67, + "AllScore": 7654352, + "Id": 1871 + }, + { + "Score": 48, + "AllScore": 36356, + "Id": 1980 + }, + { + "Score": 47, + "AllScore": 635763, + "Id": 2001 + }, + { + "Score": 45, + "AllScore": 365436, + "Id": 2100 + }, + { + "Score": 12, + "AllScore": 63422, + "Id": 2381 + }, + { + "Score": 16, + "AllScore": 35654, + "Id": 7 + }, + { + "Score": 14, + "AllScore": 635634, + "Id": 391 + }, + { + "Score": 12, + "AllScore": 63542, + "Id": 781 + }, + { + "Score": 11, + "AllScore": 63553, + "Id": 171 + }, + { + "Score": 99, + "AllScore": 8758768, + "Id": 392 + }, + { + "Score": 88, + "AllScore": 97658, + "Id": 511 + }, + { + "Score": 77, + "AllScore": 87576, + "Id": 501 + }, + { + "Score": 66, + "AllScore": 85675867, + "Id": 1819 + }, + { + "Score": 55, + "AllScore": 412343, + "Id": 1971 + }, + { + "Score": 44, + "AllScore": 314232, + "Id": 1333 + }, + { + "Score": 33, + "AllScore": 3211324, + "Id": 1555 + }, + { + "Score": 22, + "AllScore": 4132421, + "Id": 2221 + }, + { + "Score": 43, + "AllScore": 65437, + "Id": 17777 + }, + { + "Score": 12, + "AllScore": 76444, + "Id": 4411 + }, + { + "Score": 86, + "AllScore": 8976, + "Id": 5111 + }, + { + "Score": 55, + "AllScore": 98467, + "Id": 18821 + }, + { + "Score": 98, + "AllScore": 765265, + "Id": 11771 + }, + { + "Score": 67, + "AllScore": 54235, + "Id": 15666 + }, + { + "Score": 78, + "AllScore": 52345, + "Id": 18912 + }, + { + "Score": 67, + "AllScore": 523452, + "Id": 10912 + }, + { + "Score": 34, + "AllScore": 523452, + "Id": 18712 + }, + { + "Score": 12, + "AllScore": 565764, + "Id": 166271 + }, + { + "Score": 50, + "AllScore": 87654, + "Id": 1909342 + }, + { + "Score": 36, + "AllScore": 475647, + "Id": 118223 + }, + { + "Score": 49, + "AllScore": 875658, + "Id": 82178 + }, + { + "Score": 54, + "AllScore": 857346, + "Id": 341223 + }, + { + "Score": 21, + "AllScore": 745674, + "Id": 31321 + }, + { + "Score": 56, + "AllScore": 74674567, + "Id": 98897 + }, + { + "Score": 12, + "AllScore": 745746, + "Id": 1891 + }, + { + "Score": 98, + "AllScore": 9879875, + "Id": 103921 + }, + { + "Score": 64, + "AllScore": 7446, + "Id": 1784671 + }, + { + "Score": 77, + "AllScore": 456746, + "Id": 1903213 + }, + { + "Score": 7, + "AllScore": 52345423, + "Id": 19123312 + }, + { + "Score": 4, + "AllScore": 2543252, + "Id": 1012813 + }, + { + "Score": 2, + "AllScore": 413243124, + "Id": 167316312 + }, + { + "Score": 1, + "AllScore": 41324, + "Id": 19321321 + }, + { + "Score": 12, + "AllScore": 5234, + "Id": 132144 + }, + { + "Score": 99, + "AllScore": 1234124, + "Id": 13215467 + }, + { + "Score": 100, + "AllScore": 43214, + "Id": 195342 + }, + { + "Score": 90, + "AllScore": 43214, + "Id": 1098768634 + }, + { + "Score": 78, + "AllScore": 43124132, + "Id": 108698 + }, + { + "Score": 56, + "AllScore": 54325, + "Id": 1098734 + }, + { + "Score": 89, + "AllScore": 65354, + "Id": 13432112 + }, + { + "Score": 78, + "AllScore": 63543, + "Id": 1343465 + }, + { + "Score": 65, + "AllScore": 4676745, + "Id": 17657786 + }, + { + "Score": 31, + "AllScore": 47647, + "Id": 13542354 + }, + { + "Score": 55, + "AllScore": 8476545, + "Id": 142365676 + }, + { + "Score": 31, + "AllScore": 1000, + "Id": 135467 + }, + { + "Score": 67, + "AllScore": 6357854, + "Id": 1658658 + }, + { + "Score": 12, + "AllScore": 653535, + "Id": 1523456324 + }, + { + "Score": 56, + "AllScore": 655462, + "Id": 17654899 + }, + { + "Score": 12, + "AllScore": 635, + "Id": 10009767 + }, + { + "Score": 65, + "AllScore": 365342, + "Id": 1568534 + }, + { + "Score": 55, + "AllScore": 63556, + "Id": 11324136 + }, + { + "Score": 89, + "AllScore": 63553, + "Id": 108768745 + }, + { + "Score": 98, + "AllScore": 76245, + "Id": 122213241 + }, + { + "Score": 87, + "AllScore": 76467, + "Id": 21343441 + }, + { + "Score": 54, + "AllScore": 76467, + "Id": 43232131 + }, + { + "Score": 12, + "AllScore": 1000, + "Id": 7654761 + }, + { + "Score": 45, + "AllScore": 635765, + "Id": 78689231 + }, + { + "Score": 27, + "AllScore": 635346, + "Id": 987653121 + }, + { + "Score": 19, + "AllScore": 3653, + "Id": 76321111 + }, + { + "Score": 54, + "AllScore": 6543, + "Id": 923438321 + }, + { + "Score": 21, + "AllScore": 543254423, + "Id": 9034241321 + }, + { + "Score": 18, + "AllScore": 43124321, + "Id": 9432143211 + } + ] +} \ No newline at end of file diff --git a/readme.md b/readme.md index e05f799..4b98fec 100644 --- a/readme.md +++ b/readme.md @@ -56,6 +56,8 @@ 2020/11/12:新增linq包使用示例(未完成) +2020/11/16:新增项目案例(按照一定规则对一组数据进行排序分组) + # mod vendor模式加载包 通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到 diff --git a/util/jsonEnhance/Json.go b/util/jsonEnhance/Json.go new file mode 100644 index 0000000..bde2960 --- /dev/null +++ b/util/jsonEnhance/Json.go @@ -0,0 +1,33 @@ +/* + * @Author : huangzj + * @Time : 2020/11/13 9:34 + * @Description: + */ + +package jsonEnhance + +import ( + "github.com/json-iterator/go" +) + +var ( + //config 默认配置 + config = jsoniter.ConfigFastest +) + +func MarshalToString(v interface{}) string { + + s, err := config.MarshalToString(v) + if err != nil { + panic(err) + } + return s +} + +//UnmarshalFromString 直接从字符串反序列化 +func UnmarshalFromString(str string, v interface{}) { + err := config.UnmarshalFromString(str, v) + if err != nil { + panic(err) + } +} diff --git a/util/linqUse/LinqUse_test.go b/util/linqUse/LinqUse_test.go index e652d85..2ec56d4 100644 --- a/util/linqUse/LinqUse_test.go +++ b/util/linqUse/LinqUse_test.go @@ -29,8 +29,21 @@ func Test(t *testing.T) { //Combine(query) //组合两个数组的两种方式 - //fmt.Println(fmt.Sprintf("跳过三个元素,返回的数组中包含%d个元素", len(query.Skip(3).Results()))) - //fmt.Println(fmt.Sprintf("跳过发布时间在2020.1.1之前的元素,返回的数组中包含%d个元素", len(query.SkipWhile(PublishTimeBeforeFunc).Results()))) + fmt.Println(fmt.Sprintf("跳过三个元素,返回的数组中包含%d个元素", len(query.Skip(3).Results()))) + fmt.Println(fmt.Sprintf("跳过发布时间在2020.1.1之前的元素,返回的数组中包含%d个元素", len(query.SkipWhile(PublishTimeBeforeFunc).Results()))) //这个方法好像有问题,没办法过滤 + author := make([]string, 0) + query.Select(func(book interface{}) interface{} { + return book.(Book).Author + }).ToSlice(&author) + fmt.Println(author) + query1 := linq.From([][]Book{bookList, bookList}) + query1.SelectMany(func(query interface{}) linq.Query { + fmt.Println(query) + return linq.From(query) + }).Select(func(book interface{}) interface{} { + return book.(Book).Author + }).ToSlice(&author) + fmt.Println(author) //Contains(query) //判断数组中是否包含某个元素 //query.CountWith() diff --git a/vendor/modules.txt b/vendor/modules.txt index 7aca8b1..e549182 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2,3 +2,9 @@ github.com/ahmetalpbalkan/go-linq # github.com/go-ini/ini v1.57.0 github.com/go-ini/ini +# github.com/json-iterator/go v1.1.10 +github.com/json-iterator/go +# github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 +github.com/modern-go/concurrent +# github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 +github.com/modern-go/reflect2