Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - zenthangplus/go-workerpool: Go WorkerPool aims to control heavy Go Routines
Go WorkerPool aims to control heavy Go Routines. Contribute to zenthangplus/go-workerpool development by creating an account on GitHub.
Visit SiteGitHub - zenthangplus/go-workerpool: Go WorkerPool aims to control heavy Go Routines
Go WorkerPool aims to control heavy Go Routines. Contribute to zenthangplus/go-workerpool development by creating an account on GitHub.
Powered by 0x5a.live ๐
Golang Worker Pool
Inspired from Java Thread Pool, Go WorkerPool aims to control heavy Go Routines.
Installation
The simplest way to install the library is to run:
go get github.com/zenthangplus/go-workerpool
Example
package main
import (
"fmt"
"github.com/zenthangplus/go-workerpool"
)
func main() {
// Init worker pool with 3 workers to run concurrently.
pool := workerpool.NewFixedSize(3)
// Start worker pool
pool.Start()
// pool.Submit will block until slot available in Pool queue.
// Submit an identifiable job, ID will be generated randomly (using UUID)
pool.Submit(workerpool.NewIdentifiableJob(func() {
// Do a heavy job
}))
// Use NewCustomIdentifierJob if you don't want ID to be generated randomly
pool.Submit(workerpool.NewCustomIdentifierJob("custom-id", func() {
// Do a heavy job
}))
// or Submit a simple function without identifier
pool.SubmitFunc(func() {// simpler way of: Submit(FuncJob(func() {}))
// Do a heavy job
})
// pool.SubmitConfidently will submit a job in confident mode,
// this function will return ErrPoolFull when Pool queue is full.
err := pool.SubmitConfidently(workerpool.NewIdentifiableJob(func() {
// Do a heavy job
}))
if err == workerpool.ErrPoolFull {
fmt.Println("Pool is full")
}
}
Usage
package main
import (
"fmt"
"github.com/zenthangplus/go-workerpool"
)
func main() {
// Initiate worker pool with fixed size. Eg: 3 workers to run concurrently.
pool := workerpool.NewFixedSize(3)
// Or initiate fixed size worker pool with custom options.
pool = workerpool.NewFixedSize(3,
// When you want to custom mode
workerpool.WithMode(workerpool.FixedSize),
// When you want to custom number of workers
workerpool.WithNumberWorkers(5),
// When you want to customize capacity
workerpool.WithCapacity(6),
// When you want to custom log function
workerpool.WithLogFunc(func(msgFormat string, args ...interface{}) {
fmt.Printf(msgFormat+"\n", args...)
}),
)
// Start worker pool
pool.Start()
// Init a functional job with ID is generated randomly
job1 := workerpool.NewIdentifiableJob(func() {})
// init a functional job with predefined ID
job2 := workerpool.NewCustomIdentifierJob("test-an-id", func() {})
// Submit job in normal mode, it will block until pool has available slot.
pool.Submit(job1)
// or Submit a simple function
pool.SubmitFunc(func() {})
// Submit in confident mode, it will return ErrPoolFull when pool is full.
err := pool.SubmitConfidently(job2)
if err != nil {
fmt.Print(err)
}
}
// CompressDirJob
// You can create a custom Job by implement `Job` interface
type CompressDirJob struct {
directory string
}
func NewCompressDirJob(directory string) *CompressDirJob {
return &CompressDirJob{directory: directory}
}
func (c CompressDirJob) Id() string {
return "directory-" + c.directory
}
func (c CompressDirJob) Exec() {
// Do compress directory
}
GoLang Resources
are all listed below.
GitHub - GuilhermeCaruso/anko: :crystal_ball: Simple application watcher
resource
~/github.com
resource
GitHub - jidicula/go-fuzz-action: GitHub Action for Go 1.18 fuzz testing
resource
~/github.com
resource
GitHub - tucnak/climax: Climax is an alternative CLI with the human face
resource
~/github.com
resource
GitHub - lawrencewoodman/roveralls: A Go recursive coverage testing tool
resource
~/github.com
resource
GitHub - nakagami/firebirdsql: Firebird RDBMS sql driver for Go (golang)
resource
~/github.com
resource
GitHub - liweiyi88/onedump: Effortlessly database dump with one command.
resource
~/github.com
resource
GitHub - beefsack/go-astar: Go implementation of the A* search algorithm
resource
~/github.com
resource
GitHub - lxn/walk: A Windows GUI toolkit for the Go Programming Language
resource
~/github.com
resource
GitHub - mongodb/mongo-go-driver: The Official Golang driver for MongoDB
resource
~/github.com
resource
GitHub - bykof/gostradamus: Gostradamus: Better DateTimes for Go ๐ฐ๏ธ
resource
~/github.com
resource
GitHub - mozillazg/go-unidecode: ASCII transliterations of Unicode text.
resource
~/github.com
resource
GitHub - bolknote/go-gd: Go bingings for GD (http://www.boutell.com/gd/)
resource
~/github.com
resource
GitHub - mosajjal/dnsmonster: Passive DNS Capture and Monitoring Toolkit
resource
~/github.com
resource
GitHub - haxpax/gosms: :mailbox_closed: Your own local SMS gateway in Go
resource
~/github.com
resource
GitHub - wajox/gobase: This is a simple skeleton for golang applications
resource
~/github.com
resource
GitHub - VividCortex/gohistogram: Streaming approximate histograms in Go
resource
~/github.com
resource
GitHub - malaschitz/randomForest: Random Forest implementation in golang
resource
~/github.com
resource
GitHub - google/gopacket: Provides packet processing capabilities for Go
resource
~/github.com
resource
GitHub - khezen/evoli: Genetic Algorithm and Particle Swarm Optimization
resource
~/github.com
resource
GitHub - didip/tollbooth: Simple middleware to rate-limit HTTP requests.
resource
~/github.com
resource
GitHub - mustafaakin/gongular: A different approach to Go web frameworks
resource
~/github.com
resource
GitHub - songgao/colorgo: Colorize (highlight) `go build` command output
resource
~/github.com
resource
Made with โค๏ธ
to provide different kinds of informations and resources.