Go Library
4.09K subscribers
16 photos
63 files
715 links
Go (Golang) Library

Реклама: @ostinostin
Контент: @mxssl
加入频道
dkron

Dkron is a distributed cron service, easy to setup and fault tolerant with focus in:

- Easy: Easy to use with a great UI
- Reliable: Completely fault tolerant
- Highly scalable: Able to handle high volumes of scheduled jobs and thousands of nodes

Dkron is written in Go and leverage the power of the Raft protocol and Serf for providing fault tolerance, reliability and scalability while keeping simple and easily installable.

https://github.com/distribworks/dkron
lingua-go

What does this library do?

Its task is simple: It tells you which language some text is written in. This is very useful as a preprocessing step for linguistic data in natural language processing applications such as text classification and spell checking. Other use cases, for instance, might include routing e-mails to the right geographically located customer service department, based on the e-mails' languages.

https://github.com/pemistahl/lingua-go
Go module proxy at Grab

At Grab, we rely heavily on a large Go monorepo for backend development, which offers benefits like code reusability and discoverability. However, as we continue to grow, managing a large monorepo brings about its own set of unique challenges.

As an example, using Go commands such as go get and go list can be incredibly slow when fetching Go modules residing in a large multi-module repository. This sluggishness takes a toll on developer productivity, burdens our Continuous Integration (CI) systems, and strains our Version Control System host (VCS), GitLab.

In this blog post, we look at how Athens, a Go module proxy, helps to improve the overall developer experience of engineers working with a large Go monorepo at Grab.

https://engineering.grab.com/go-module-proxy
Go Frequently Asked Questions (FAQ)

https://go.dev/doc/faq
Simple Fixed-window Rate Limiter With Redis

Fixed-window rate limiting: This is a straightforward algorithm that counts the number of requests received within a fixed time window, such as one minute. Once the maximum number of requests is reached, additional requests are rejected until the next window begins.

https://hjr265.me/blog/simple-rate-limiter-with-redis
About Structured Logging in Go 1.21

Upcoming version of the Go programming language, which is expected to be released in the fall of 2023, will introduce a new package named slog. It provides a clean and consistent API for structured logging. Let’s take a closer look on how to use this new library.

https://lukas.zapletalovi.com/posts/2023/about-structured-logging-in-go121
Adventures in building a Go container with Nix

I’d like to preface this article by saying that it is not an authoritative guide, rather it is just me documenting my experience figuring various things out, in the hope that it’ll be useful or interesting to someone else. I assume some knowledge of Nix and containerization throughout this article.

https://jameswillia.ms/posts/go-nix-containers.html
Deploy your existing containers to OpenFaaS

Learn how to deploy existing containers to OpenFaaS alongside your functions

https://www.openfaas.com/blog/porting-existing-containers-to-openfaas
mailpit

Mailpit is a multi-platform email testing tool & API for developers.

It acts as both an SMTP server, and provides a web interface to view all captured emails. It also contains an API for automated integration testing.

Mailpit is inspired by MailHog, but modern and much, much faster.

https://github.com/axllent/mailpit
Go and SQLite in the Cloud

Why SQLite and Go in the cloud are a great match, getting started, best practices, and more.

https://www.golang.dk/articles/go-and-sqlite-in-the-cloud
timecraft

Timecraft is a software runtime that executes WebAssembly modules with sandboxing, task orchestration, and time travel capabilities.

The development of distributed systems comes with many challenges, and satisfying the instrumentation, scale, or security requirements adds to the difficulty. By combining a sandbox, a task orchestrator, and a time machine in a software runtime, Timecraft intends to bring the tools and structure to help developers on their journey to construct, test, and operate such systems.

https://github.com/stealthrocket/timecraft
bingo

go get like, simple CLI that allows automated versioning of Go package level binaries (e.g required as dev tools by your project!) built on top of Go Modules, allowing reproducible dev environments.

https://github.com/bwplotka/bingo
aqua

Declarative CLI Version manager written in Go. Support Lazy Install, Registry, and continuous update with Renovate. CLI version is switched seamlessly

https://github.com/aquaproj/aqua
tyson

TySON (TypeScript Object Notation) is a subset of TypeScript, chosen to be useful as an embeddable configuration language that generates JSON. You can think of TySON as JSON + comments + types + basic logic using TypeScript syntax. TySON files use the .tson extension.

The goal is to make it possible for all major programming languages to read configuration written in TypeScript using native libraries. That is, a go program should be able to read TySON using a go library, a rust program should be able to read TySON using a rust library, and so on. Our first implementation is written in pure go, and a rust implementation will follow.

https://github.com/jetpack-io/tyson
Four-part tutorial series on test fuzzing in Go

Random testing in Go: https://bitfieldconsulting.com/golang/random-testing

Fuzz tests in Go: https://bitfieldconsulting.com/golang/fuzz-tests

Writing a Go fuzz target: https://bitfieldconsulting.com/golang/fuzz-target

Finding bugs with fuzzing: https://bitfieldconsulting.com/golang/bugs-fuzzing
goproxy

A minimalist Go module proxy handler.

Goproxy has fully implemented the GOPROXY protocol. Our goal is to find the most dead simple way to provide a minimalist handler that can act as a full-featured Go module proxy for those who want to build their own proxies.

https://github.com/goproxy/goproxy
Go Sync or Go Home: WaitGroup

Go’s goroutines, channels, and mutexes make it easy to develop complex concurrency systems. Most problems can be solved using these three mechanisms, but you might be asking yourself — what else is out there?

That’s what I was wondering when I stumbled upon the lesser-known features of the sync and x/sync packages. In this blog series, I will explore some of these niche features, focusing on practical use cases and how they can be used to boost performance and reduce latency.

https://medium.com/@yardenlaif/go-sync-or-go-home-waitgroup-5f074a03776e
ghw

ghw is a Go library providing hardware inspection and discovery for Linux and Windows. There currently exists partial support for MacOSX.

https://github.com/jaypipes/ghw
Coroutines for Go

This post is about why we need a coroutine package for Go, and what it would look like. But first, what are coroutines?

https://research.swtch.com/coro
Analyzing Go Build Times

Go is often praised for its fast build times. While they are pretty quick, they are slow enough that I spend a lot of time waiting for them, enough that it prompted me to go down the rabbit hole of thoroughly analyzing them. This post covers all aspects of what makes Go builds fast or slow.

https://blog.howardjohn.info/posts/go-build-times