Giter VIP home page Giter VIP logo

go-daily-lib's Introduction

Go 每日一库

每天学习一个 Go 语言库!

相关博客:

  • flag Go 标准库提供的命令行选项解析库,简单实用。
  • go-flags 第三方命令行选项解析库,非常强大。
  • go-homedir 不使用 cgo 获取用户主目录的第三方库,支持交叉编译。
  • go-ini 解析 INI 配置文件的第三方库。
  • cobra 编写命令行程序的库,并提供生成代码的脚手架。
  • viper 灵活强大的配置管理工具,支持多种 JSON/TOML/YAML 等多种配置格式,支持热更新。
  • fsnotify 监控文件或目录改动的第三方库。
  • cast 方便实用的类型转换库。
  • log Go 标准日志库。
  • logrus 使用非常广泛的开源日志库。
  • godotenv 读取项目目录中的 .env 文件设置程序的环境变量。支持多种开发模式dev/prod
  • carbon 功能强大的日期时间库,仿 PHP 的同名库。
  • email 发送邮件的第三方库。
  • dig Uber 出品的依赖注入库。
  • gojsonq Go 操作 JSON 数据的库,支持基本操作和花式操作方法。
  • message-bus 异步消息通信库。
  • watermill 功能丰富的消息通信库。
  • wire Google 出品的依赖注入框架,编译前自动生成 Go 代码,无需反射。
  • mergo 合并结构体和 map 的库。
  • copier 处理相同或不同结构体/map 之间的赋值。
  • jennifer Go 代码生成库。
  • go-cmp Google 出品的比较库,一般用于测试代码中。
  • buntdb Go 实现的内存键值库,支持 JSON 操作和事务。
  • gjson 专注于读取 JSON 值的库。
  • sjson 专注于设置 JSON 值的库。
  • jj 操作 JSON 数据的命令行程序。
  • govaluate 计算动态 Go 表达式的库。
  • validator 使用最为广泛的数据校验库。
  • gopsutil 获取各种系统信息的库。
  • gentleman HTTP 客户端。
  • plot 绘图库。
  • gron 定时任务管理库。
  • go-app 使用 Go + Webassembly 编写应用的库。
  • zap Uber 出品的高性能日志库。
  • zerolog 高性能日志库,专注于 JSON 格式的日志,号称 0 内存分配。
  • nutsdb 国人开发的内存键值库,支持备份和还原。
  • sqlc 根据 SQL 语句生成相应操作数据库的 Go 代码。
  • xorm ORM 库。
  • rpc 标准 RPC 库。
  • jsonrpc 标准 JSON-RPC 库。
  • rpcx 基于标准 RPC 库扩展的功能强大、高性能的 RPC 框架。
  • twirp twitchtv 出品的基于 Google Protobuf 的 RPC 库。
  • casbin 灵活、强大的权限管理库,支持多种语言。
  • fyne Go GUI 框架。
  • negroni Go 中间件库。
  • cli 命令行程序库,方便编写命令行程序。
  • cron 定时任务管理库,对标 Linux 的 crontab 命令。
  • mapstructure 结构体和 map 转换库。
  • jobrunner 基于 cron 的定时任务管理库。
  • gabs JSON 操作库。
  • commonregex 收集常用的正则表达式。
  • quicktemplate Go 模板库,预先编译为 Go 代码。
  • air 监听文件修改,自动编译,重启 Go 程序。提升开发效率。
  • goquery Go 的jQuery
  • rxgo 基于pipelines的异步编程库。
  • bytebufferpool 基于sync.Pool实现的高性能对象缓冲池。
  • gotalk 专注于进程间通信的库。
  • fasttemplate 一款小型的模板库,可用于替换strings.Replacefmt.Sprintf
  • reflect 反射标准库reflect详解。
  • ants goroutine 池。
  • tunny 另一个 goroutine 池实现。
  • bubbletea TUI 程序框架。
  • ozzo-validation 数据校验库。
  • dateparse 日期时间字符串解析库。
  • resty HTTP client。
  • termtables 控制台输出表格。
  • colly Go 语言的爬虫框架。
  • net/http: 基础和中间件
  • gorilla/mux gorilla Web 开发包之路由库
  • gorilla/handlers gorilla Web 开发包之中间件库
  • gorilla/schema gorilla Web 开发包之表单处理库
  • gorilla/securecookie gorilla Web 开发包之安全 cookie 库
  • gorilla/sessions gorilla Web 开发包之 session 处理库
  • goth 第三方认证合集
  • testing 标准库测试包
  • testify Go 最流行的测试库
  • bitset 位集合操作库
  • roaring 压缩位图
  • os/exec 执行外部命令
  • ebiten

go-daily-lib's People

Contributors

aveyuan avatar darjun avatar dependabot[bot] avatar l6l6ng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-daily-lib's Issues

gojsonq 翻页查询偏移量问题

你好,我在使用 gojsonq 的时候发现没有偏移量 Offset 这个方法了。
部分代码如下,没有 Offset 方法,请问你用的是那个版本的 gojsonq

r1 := gq.From("items").Select("id", "name").Limit(3).Get()

公众号文章纠错

今天碰巧看到你写的介绍 ants公众号文章,写的不错。

不过,文章结尾的 ants Github 链接错写成了 github.com/valyala/ants,正确的地址应该是 github.com/panjf2000/ants,因为你的公众号没有评论功能,所以到这里来反馈一下。

推荐RxGo

Reactive Extensions for the Go Language,使用RxGo可以更轻松地编写并发调用代码

package main

import (
	"context"
	"errors"
	"fmt"
	"log"
	"time"

	"github.com/Pallinder/go-randomdata"
	"github.com/ahmetb/go-linq"
	"github.com/reactivex/rxgo/v2"
)

// ParallelCase1 并发获取不同类型字段信息
func ParallelCase1(ctx context.Context) {
	type Student struct {
		ID      int64
		Name    string
		Age     int64
		Teacher string
	}

	student := Student{ID: 1}
	getNameByID := func() (interface{}, error) {
		time.Sleep(1 * time.Second)
		fmt.Println("getNameByID Success")
		return func() { student.Name = "kangkang" }, nil
	}
	getAgeByID := func() (interface{}, error) {
		time.Sleep(3 * time.Second)
		fmt.Println("getAgeByID Success")
		return func() { student.Age = 13 }, nil
	}
	getTeacherByID := func() (interface{}, error) {
		time.Sleep(2 * time.Second)
		fmt.Println("getTeacherByID failed")
		return nil, errors.New("ERROR!")
	}

	for item := range rxgo.Just(getNameByID, getAgeByID, getTeacherByID)().Map(
		// 执行并发任务
		func(ctx context.Context, item interface{}) (interface{}, error) {
			f := item.(func() (interface{}, error))
			return f()
		},
		// 配置并发策略
		rxgo.WithPool(3),
		rxgo.WithErrorStrategy(rxgo.StopOnError),
		rxgo.WithContext(ctx),
	).Observe() {
		if item.E != nil {
			log.Fatal(item.E)
		}
		// 获取并发任务执行结果
		f := item.V.(func())
		f()
	}

	fmt.Printf("student: %+v", student)
}

// ParallelCase2 并发处理同类型字段信息
func ParallelCase2(ctx context.Context) {
	idList, _ := rxgo.Range(1, 100).ToSlice(100)
	var nameList []string

	itemList, err := rxgo.Just(idList)().Map(
		func(ctx context.Context, item interface{}) (interface{}, error) {
			randNum := randomdata.Number(0, 3)
			time.Sleep(time.Duration(randNum) * time.Second)
			if randNum == 1 {
				return nil, errors.New("[RANDOM ERROR]")
			}
			randName := randomdata.SillyName()
			fmt.Printf("randNum: %d, randName: %s\n", randNum, randName)
			return randName, nil
		},
		rxgo.WithPool(20),                            // 最大并发数
		rxgo.WithBufferedChannel(20),                 // 带缓存接收
		rxgo.WithContext(ctx),                        // 传递context进行链路追踪
		rxgo.WithErrorStrategy(rxgo.ContinueOnError), // 错误处理策略
	).ToSlice(len(idList))
	if err != nil {
		log.Fatalf("[RXGO ERROR]: %+v", err)
	}

	linq.From(itemList).SelectT(
		func(item string) string { return item },
	).ToSlice(&nameList)

	fmt.Printf("nameList: %+v", nameList)
}

func main() {
	ctx := context.Background()
	ParallelCase1(ctx)
	ParallelCase2(ctx)
}

关于cron中的chan

关于cron中的以下代码:

func SkipIfStillRunning(logger Logger) JobWrapper {
  return func(j Job) Job {
    var ch = make(chan struct{}, 1)
    ch <- struct{}{}
    return FuncJob(func() {
      select {
      case v := <-ch:
        j.Run()
        ch <- v
      default:
        logger.Info("skip")
      }
    })
  }
}

其中: ch <- struct{}{} struct初始化不是应该是ch <- struct{}吗,为什么是ch <- struct{}{}

casbin库中,RBAC domain部分的模型文件有误

  • casbin库中,RBAC domain部分的模型文件如下
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.obj
  • 需要修改为
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

README.md中错误的链接

你好,在根目录下的README.md中,gorilla Web 开发包之安全 cookie 库的链接貌似指向了shema,您应该指向securecookie,请你检查

struct拷贝

相同struct数据合并的mergo,不同struct数据的copier库考虑下呗。 要是有更好的也推荐下,目前就找到这两。
要是权限库casbin能考虑更好了

推荐一个socks5的库

推荐自己这个库go-sock5是一份armon go-sock5 的镜像,仍执行原作者MIT Licese.原作者库年久未维护,所以镜像了一份.
因为我增加了许多特性,破坏了原库众多api,主要为了并发性和扩展性,增加众多代码覆盖性测试,并实现了客户端,客户端算是试验性支持.

go-charts: golang的图表库

go-charts简单方便的形式生成数据图表,支持svgpng两种方式的输出,支持主题light, dark, grafana以及ant

Apache ECharts在前端开发中得到众多开发者的认可,因此go-charts提供了兼容Apache ECharts的配置参数,简单快捷的生成相似的图表(svgpng),方便插入至Email或分享使用。下面为常用的图表截图(主题为light与grafana):

Apache ECharts在前端开发中得到众多开发者的认可,因此go-charts提供了兼容Apache ECharts的配置参数,简单快捷的生成相似的图表(svg或png),方便插入至Email或分享使用

giorgisio / goav

Golang bindings for FFmpeg

博主会不会写一下这个库,我看中文资料很少

共享内存

大佬又是我哈哈哈!
想请教大佬一个问题,就是 golang 中使用共享内存的库有什么推荐的吗?
在网上没有找到合适的库,最好是shm+mmap都有的那种

Watermill

看了您了解到Watermill这个包,但如果我想有多个订阅者订阅同一个topic,那么多个订阅者都会消费这个消息,有没有办法只有一个订阅者消费这个消息,不重复消费... 谢谢!

命令行解析库

地址

https://github.com/guonaihong/clop

子命令demo

package main

import (
	"fmt"
	"github.com/guonaihong/clop"
)

type add struct {
	All      bool     `clop:"-A; --all" usage:"add changes from all tracked and untracked files"`
	Force    bool     `clop:"-f; --force" usage:"allow adding otherwise ignored files"`
	Pathspec []string `clop:"args=pathspec"`
}

type mv struct {
	Force bool `clop:"-f; --force" usage:"allow adding otherwise ignored files"`
}

type git struct {
	Add add `clop:"subcommand=add" usage:"Add file contents to the index"`
	Mv  mv  `clop:"subcommand=mv" usage:"Move or rename a file, a directory, or a symlink"`
}

func main() {
	g := git{}
	clop.Bind(&g)
	fmt.Printf("git:%#v\n", g)
	fmt.Printf("git:set mv(%t) or set add(%t)\n", clop.IsSetSubcommand("mv"), clop.IsSetSubcommand("add"))
}
// run:
// ./git add -f

// output:
// git:main.git{Add:main.add{All:false, Force:true, Pathspec:[]string(nil)}, Mv:main.mv{Force:false}}
// git:set mv(false) or set add(true)

每日一库推荐-arpc

一个简单易用、高性能、支持更多姿势的RPC库

网络交互的几种模式

交互方式 方向 完整流程
call c -> s
s -> c
request and response
notify c -> s
s -> c
request without response

传统RPC的缺点

  1. call 只支持 c->s,不支持 s->c,不支持notify
  2. 函数调用的写法,函数返回即结束调用,不支持函数体外的同步/异步回包
  3. 多数rpc框架绑定了序列化

ARPC特点

  1. 支持c/s双向call、notify
  2. 像使用http router一样,不采用函数调用的写法,不依赖反射
  3. 提供类似gin的ctx.Bind方法,方便string、[]byte、struct等类型绑定
  4. 支持异步回包,handler函数返回不代表call处理结束,可以handler返回后再回包(同步异步皆可)
  5. 支持自定制序列化反序列化(pb,msgpack各种,只要你喜欢,随意扩展),为了减少依赖目前默认用的标准库json
  6. 支持自定制协议(tcp,unixsock,kcp,quic...)
  7. 支持应用层定制logger
  8. 支持自定制新连接、连接断开、发送队列满的handler
  9. 支持contex,也支持直接使用timeout参数、非多步流程的调用等待写起来更方便
  10. 支持client pool,因为支持异步并发调用回包,pool实现采用简单的轮询,能够满足性能需要
  11. 支持用户自己定制rpc协议
  12. 支持中间件
  13. 支持发布订阅
  • 最少依赖,默认使用方式只依赖标准库
  • 示例请参考READMEexamples
  • 更多特点请阅读代码,如需扩展,欢迎PR

ARPC性能

  • 简单的echo压测
rpc 协议/网络 序列化 配置 连接数 每个连接并发协程数 qps
arpc tcp/localhost encoding/json os: VMWare Ubuntu 18.04
cpu: AMD 3500U 4c8t
mem: 2G
8 10 8-10万
grpc http2/localhost protobuf os: VMWare Ubuntu 18.04
cpu: AMD 3500U 4c8t
mem: 2G
8 10 2-3万
  • arpc性能基本与当前其他第一梯队性能的golang rpc处于同样水平范围、甚至更高
  • grpc由于使用了http2,性能浪费是不可避免的,这里对比qps只是为了给出个参考系
  • 配置较低,更多配置、协议、序列化测试欢迎各位道友自行进行,压测代码: server, client

示例工程

  • 用arpc作为基础设施实现了个发布订阅服务:achan,示例请参考README

zap

大佬 有沒有 zap 的讲解篇的?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.