anagent alternatives and similar packages
Based on the "Miscellaneous" category.
Alternatively, view anagent alternatives based on common mentions on social networks and blogs.
-
go-formatter
A curated list of awesome Go frameworks, libraries and software -
golang-standards/project-layout
Standard Go Project Layout -
archiver
Easily create & extract archives, and compress & decompress files of various formats -
ardanlabs/service
Starter code for writing web services in Go using Kubernetes. -
go-multierror
A Go (golang) package for representing a list of errors as a single error. -
go-restful-api
An idiomatic Go REST API starter kit (boilerplate) following the SOLID principles and Clean Architecture -
ghorg
Quickly clone an entire org/users repositories into one directory - Supports GitHub, GitLab, Bitbucket, and more 🥚 -
xstrings
Implements string functions widely used in other languages but absent in Go. -
go-shortid
Super short, fully unique, non-sequential and URL friendly Ids -
health
An easy to use, extensible health check library for Go applications. -
gountries
Gountries provides: Countries (ISO-3166-1), Country Subdivisions(ISO-3166-2), Currencies (ISO 4217), Geo Coordinates(ISO-6709) as well as translations, country borders and other stuff exposed as struct data. -
container
A lightweight yet powerful IoC dependency injection container for the Go programming language -
banner
An easy way to add useful startup banners into your Go applications -
golang-templates/seed
Go application GitHub repository template. -
go-starter
An opinionated production-ready SQL-/Swagger-first RESTful JSON API written in Go, highly integrated with VSCode DevContainers by allaboutapps. -
antch
Antch, a fast, powerful and extensible web crawling & scraping framework for Go -
countries
Countries - ISO 3166 (ISO3166-1, ISO3166, Digit, Alpha-2 and Alpha-3) countries codes and names (on eng and rus), ISO 4217 currency designators, ITU-T E.164 IDD calling phone codes, countries capitals, UN M.49 regions codes, ccTLD countries domains, IOC/NOC and FIFA letters codes, VERY VERY FAST, NO maps[], NO slices[], NO init() funcs, NO external links/files/data, NO interface{}, NO specific dependencies, Databases/JSON/GOB/XML/CSV compatible, Emoji countries flags and currencies support, full support ISO-3166-1, ISO-4217, ITU-T E.164, Unicode CLDR and ccTLD standarts.
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of anagent or a related project?
Popular Comparisons
README
Anagent

Minimalistic, pluggable Golang evloop/timer handler with dependency-injection - based on [codegangsta/inject](github.com/codegangsta/inject) - [go-macaron/inject](github.com/go-macaron/inject) and chuckpreslar/emission.
Anagent is a lightweight library that allows you to plug inside to other event loops, or allows you to handle and create your own within your application - leaving the control to you.
It comes with dependency-injection from codegangsta/inject, and it's also a soft-wrapper to chuckpreslar/emission, adding to it dependency injection capabilities and timer handlers.
Usage
Event Emitter with Dependency injection
package main
import (
"log"
"github.com/mudler/anagent"
)
type TestTest struct {
Test string
}
func main() {
agent := anagent.New()
mytest := &TestTest{Test: "PONG!"}
agent.Map(mytest)
agent.Once("test", func(te *TestTest, l *log.Logger) {
if te.Test == "PONG!" {
l.Println("It just works!")
}
})
agent.Emit("test")
}
What happened here? we mapped our structure instance (TestTest
) inside the agent with (agent.Map()
), and all fired events can access to them.
Timer / Reactor
package main
import "github.com/mudler/anagent"
import "fmt"
type TestTest struct {
Test string
}
func main() {
agent := anagent.New()
mytest := &TestTest{Test: "PONG!"}
agent.Map(mytest)
agent.Emitter().On("test", func(s string) { fmt.Println("Received: " + s) })
// Not recurring timer
agent.TimerSeconds(int64(3), false, func(a *anagent.Anagent, te *TestTest) {
a.Emitter().Emit("test", te.Test)
go a.Stop()
})
agent.Start() // Loops here and never returns
}
The code portion will start and wait for 3 seconds, then it will execute the callback (not recurring, that's why the false
) that will fire a custom event defined before (note, it's not using the dependency-injection capabilities, thus it's accessing the emitter handler directly with agent.Emitter()
).
The difference is that when we access to On()
provided by agent.On()
, we access to the agent dependencies, that have been mapped with agent.Map()
- otherwise, with agent.Emitter().On()
we are free to bind any arguments to the event callback.
After the event is fired, the timer stops the eventloop (a.Stop()
), so the program returns.
Hook into other loops
It is often in other framework to use loop patterns, as example in framework for game development, network agents, and such. We can hook into other loops, and run the agent Step function, so we can still leverage the evloop functionalities.
package main
import "github.com/mudler/anagent"
import "fmt"
type TestTest struct {
Test string
}
func main() {
agent := anagent.New()
mytest := &TestTest{Test: "PONG!"}
agent.Map(mytest)
// Reply with a delay of 2s
agent.Emitter().On("test", func(s string) {
agent.TimerSeconds(int64(2), false, func() {
fmt.Println("Received: " + s)
})
})
// Recurring timer
agent.TimerSeconds(int64(3), true, func(a *anagent.Anagent, te *TestTest) {
fmt.Println("PING!")
a.Emitter().Emit("test", te.Test)
})
for { // Infinite loop
agent.Step()
}
}