Go
Groups/Orgs/Conferences
Learn
Guide
- Go 101
- Go by Example
- Learn Go with Tests
- GolangBot Tutorial Series
- Gophercises
- Go: The Complete Developer's Guide (Golang) @ Udemy
- Go Bootcamp: Learn to Code with GolanG
- justforfunc: Programming in Go
- Ultimate Go study guide
- Practical Go Lessons
- How to Write Go Code
- Alikhll/golang-developer-roadmap: Roadmap to becoming a Go developer in 2020
- Specific Topics
- Cryptography: Practical Cryptography with Go
- Heroku: Go Support
- ardanlabs/gotraining/reading
- Learn Go with Tests
Books
- Bitfield Consulting: Books
- Build Systems With Go: Everything a Gopher must know
- teh-cmc/go-internals: A book about the internals of the Go programming language
- 100 Go Mistakes and How to Avoid Them
- Building Microservices with Go
- Powerful Command-Line Applications in Go: Build Fast and Maintainable Tools
- Writing An Interpreter In Go
- Hands-On Software Engineering with Golang
- Building Modern CLI Applications in Go
Lists
- 13 Best Go Programming Books
- 20 Best Golang Books You Should Read
- Best Golang Books
- Best Go Programming Books (2019)
- Best Go books for 2022
- Best Golang Books That Should Be On Your Bookshelf
- Awesome Go Books
Language Comparisons
- Why Go? – Key advantages you may have overlooked
- Go Creeping In
- Choosing Go at American Express
- vs Rust
- Pros and Cons of Rust and Go
- Why Discord is switching from Go to Rust
- Rust vs Go
- Rust vs. Go: Why They’re Better Together
- vs Python
- My journey from Python to Go
- Why We’re Writing Machine Learning Infrastructure in Go Not Python
- Why I started to use Golang more than Python or Ruby?
- A Data Engineering Perspective on Go vs. Python (Part 1)
- vs Node.js
- Go vs Node.js in Building Microservices: An Exhausting Comparison
- vs Ruby
- Go is the new Ruby
- vs Crystal
- Go vs Crystal Performance
Blogs
Inspiration
- Libraries
- Pure Go implementation of the WebRTC API
- Asynq: Simple task queue for Go
- go-kit : A standard library for microservices.
- micro : The Go Micro services development framework
- cloudflare-go: Go library for the Cloudflare v4 API
- screego/server
- tidwall/tinyqueue: Binary heap priority queues in Go
- Awesome Go (GitHub)
- github.com/trending/go
- Josh Baker
- An Interview With Joshua Baker of Tile38
- Josh Baker - Tile38
- John Arundel
- Bitfield Consulting
- Bitfield Consulting - YT Channel
Repos to Learn
- Ask HN: Which are the best Go repositories to read to learn the language?
- hashicorp/memberlist: Golang package for gossip based membership and failure detection
Youtube
Rob Pike
- Rob Pike - Go Concurrency Patterns (Google I/O 2012)
- Rob Pike - Concurrency Is Not Parallelism (Heroku Waza 2012)
- Rob Pike - Go Proverbs (Gopherfest 2015)
- Rob Pike - Simplicity is Complicated
- 5 things Rob Pike attributes Go's success to
Ideas to Explore
- WebAssembly + TinyGo
- Hardware w/ TinyGo or Gobot
- Genetic Algorithms
- tomcraven/goga: Golang Genetic Algorithm
- sausheong/ga: Simple genetic algorithms in Go
- soypat/mu8: Genetic algorithm for unsupervised machine learning in Go.
Concepts
Bits
Channels
- John Graham-Cunning - A Channel Compendium (GoperCon 2014)
- The Go Way: "small sequential pieces joined by channels"
- The Behavior Of Channels
Contexts
- Understanding the context package in Go
- Pitfalls of context values and how to avoid or mitigate them in Go
- Using Context in Golang - Cancellation, Timeouts and Values (With Examples)
Structures
Pointers
- Understand Go pointers in less than 800 words or your money back (Dave Cheney)
- When to use pointers in Go
- Golang tips: why pointers to slices are useful and how ignoring them can lead to tricky bugs
- Golang Tutorial 3 - Golang pointers explained, once and for all
Interfaces
Concurrency
- astaxie/build-web-application-with-golang/concurrency
- Ivan Danyliuk - Visualizing Concurrency in Go (GopherCon 2016)
- Slow down your code with goroutines
- Never start a goroutine without knowing how it will stop
- The Concurrent Bug I Keep Writing
- Go Concurrency Patterns: Pipelines and cancellation
- Simple Concurrency in Go for Fans of JavaScript's Promise.all
- Advanced Go Concurrency Patterns
- Go Lesson: Concurrency, Leaks, and You!
- sourcegraph/conc: Better structured concurrency for go
Error Handling
- Function Failure Reporting: Error or OK
- "If the function is guaranteed to complete successfully, and this is either by having no way to fail, or by handling failures in it, there is no reason to return either an error or an OK bool."
- "error is an interface, which has a performance penalty over a bool variable. This performance penalty can be considered minor, depending on the function purpose. This might be a good reason to prefer an OK bool return type."
- Working with Errors in Go 1.13 (The Go Blog)
- Errors are values
- REST API Error Handling in Go: Behavioral Type Assertion
- Error handling guidelines for Go
- Don’t just check errors, handle them gracefully (Dave Cheney)
- "By far the worst problem with sentinel error values is they create a source code dependency between two packages. As an example, to check if an error is equal to io.EOF, your code must import the io package."
- "While error types are better than sentinel error values, because they can capture more context about what went wrong, error types share many of the problems of error values. So again my advice is to avoid error types, or at least, avoid making them part of your public API."
- "Assert errors for behaviour, not type"
- "Don’t just check errors, handle them gracefully"
- "Only handle errors once"
func Write(w io.Writer, buf []byte) error {
_, err := w.Write(buf)
if err != nil {
// annotated error goes to log file
log.Println("unable to write:", err)
// unannotated error returned to caller
return err
}
return nil
}
// vs
func Write(w io.Write, buf []byte) error {
_, err := w.Write(buf)
return errors.Wrap(err, "write failed")
}
Generics
Projects, Documentation & Testing
Packages & Modules
- Organizing Go code
- Standard Package Layout
- Standard Go Project Layout
- this is not a standard Go project layout #117
- Kat Zien - How Do You Structure Your Go Apps? (GopherCon UK 2018)
- How do I Structure my Go Project?
- Go Project Structure Best Practices
- Package Management With Go Modules: The Pragmatic Guide
- Go Modules
- Using Go Modules
- Cockroach Labs: Go (Golang) coding guidelines
- How to Structure Your Project in Golang: The Backend Developer’s Guide
- 4. William Kennedy - Package Oriented Design
- Testing errors in Go
Documentation
- Godoc: documenting Go code
- A Comprehensive Guide to Publishing Golang Libraries
- Documenting Go Github Repo
- Libraries
- swaggo/swag: Automatically generate RESTful API documentation with Swagger 2.0 for Go
Testing
Style & Best Practices
- Effective Go
- Go Code Review Comments
- Ten Useful Techniques in Go (Faith Arslan)
- Uber Go Style Guide
- Go Code Review Comments
- Things you probably don't know about Go (2012)
- The Evolution of a Go Programmer
- Steve Francia - 7 common mistakes in Go and when to avoid them
- Mat Ryer - Things in Go I Never Use (GothamGo 2018)
- Mat Ryer - Writing Beautiful Packages in Go (Golang UK Conference 2017)
- Dave Cheney - Practical Go (GoSG Meetup)
- Go Proverbs
- GopherCon EU 2018: Peter Bourgon - Best Practices for Industrial Programming
- Francesc Campoy - Twelve Go Best Practices
- Practical Go: Real world advice for writing maintainable Go programs
- The Zen of Go / Dave Cheney
- tmrts/go-patterns: Curated list of Go design patterns, recipes and idioms
- Darker Corners of Go
- Go modules cheat sheet
- a8m/golang-cheat-sheet
- Ten commandments of Go
- Golang Functional Options Pattern
- Go Style
- Golang UK Conference 2016 - Mat Ryer - Idiomatic Go Tricks
- tmrts/go-patterns: Curated list of Go design patterns, recipes and idioms
Web
Servers & Sockets
Libraries
- gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance
- go-chi/chi: lightweight, idiomatic and composable router for building Go HTTP services
- gofiber/fiber: Express inspired web framework written in Go
- gorilla/mux: A powerful HTTP router and URL matcher for building Go web servers
- caddyserver/caddy: Fast, multi-platform web server with automatic HTTPS
- traefik/traefik: The Cloud Native Application Proxy
- astaxie/build-web-application-with-golang
- miekg/dns: DNS library in Go
Reading
- Make resilient Go net/http servers using timeouts, deadlines and context cancellation
- "While this is a timeout-like behavior, it would be more useful to stop our server from further execution when it reaches the timeout, ending the request. In our example above, the handler proceeds to process the request until it completes, although it takes 100% longer (2 seconds) than the response write timeout time (1 second)."
- "The package defines the Context type. It's primary purpose is to carry deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes. If you would like to learn more about the context package, I recommend reading “Go Concurrency Patterns: Context” on Golang's blog."
- So you want to expose Go on the Internet (Cloudflare)
- "A zero/default http.Server, like the one used by the package-level helpers http.ListenAndServe and http.ListenAndServeTLS, comes with no timeouts. You don't want that."
- Mat Ryer - How I build APIs capable of gigantic scale in Go
- Making a RESTful JSON API in Go
- HTTPS for free in Go, with little help of Let's Encrypt
- HTTPS and Go
- net.JoinHostPort
- Choosing the Right Go Web Framework
- Building a Go Web API with the New Digital Ocean App Platform
- Rate limiting in Golang HTTP client
- DNS Basics and Building Simple DNS Server in Go
- How I write HTTP services after eight years.
- Choosing a Go Framework: Gin vs. Echo
- Bench-marking RESTful APIs
- A project to prototype web stacks
Websockets
- gotify/server: A simple server for sending and receiving messages in real-time per WebSocket. (Includes a sleek web-ui)
- Eran Yanay - Going Infinite, handling 1 millions websockets connections in Go
- Working with Websockets and Socket.IO in Go - Tutorial
- Web sockets over TLS
- A Million WebSockets and Go
HTTP Requests
- go-resty/resty: Simple HTTP and REST client library for Go
- imroc/req: a golang http request library for humans
- dghubble/sling: A Go HTTP client library for creating and sending API requests
API Clients
- Writing REST API Client in Go
- Build a web API client in Go, Part 1: Connecting to the API
- Generating a Go HTTP Client from OpenAPI schemas
- oapi-codegen: Generate Go client and server boilerplate from OpenAPI 3 specifications
- Examples
- google/go-github: Go library for accessing the GitHub API
- digitalocean/godo: DigitalOcean Go API client
Redis
- github.com/alrf/go_redis_pg: Golang REST API application with Redis and PostgreSQL, Jenkins pipeline for building it.
- Working with Redis in Go
- Creating a simple tiny URL generator using Golang, PostgreSQL and Redis
Web Assembly
Misc
- graphql-go/graphql: An implementation of GraphQL for Go / Golang
- Shpota/goxygen: Generate a modern Web project with Go and Angular, React or Vue in seconds rocket
- Build a Blog With Go Templates
- Virtual private services with tsnet
- Embedding Our New React UI in Go
Geospatial
Tools
People/Groups
Geometry
- paulmach/orb: Types and utilities for working with 2d geometry in Golang
- twpayne/go-geom: Package geom implements efficient geometry types for geospatial applications.
- ctessum/geom: Geometry objects and functions for Go
- paulsmith/gogeos: Go library for spatial data operations and geometric algorithms (Go bindings for GEOS)
- srimaln91/go-geom: Go bindings for liblwgeom, libgeos, proj.4 libraries
- kellydunn/golang-geo: Geographical calculations in Go
- peterstace/simplefeatures: Simple Features is a pure Go Implementation of the OpenGIS Simple Feature Access Specification agnorak
Databases/Trees
- tidwall/tile38: Tile38 is a geospatial database and realtime geofencing server
- dhconnelly/rtreego: an R-Tree library for Go
- CrunchyData/pg_tileserv: A very thin PostGIS-only tile server in Go. Takes in HTTP tile requests, executes SQL, returns MVT tiles.
- CrunchyData/pg_featureserv: Lightweight RESTful Geospatial Feature Server for PostGIS in Go
- A blazing fast geo database with LevelDB, Go and Geohashes
- TierMobility/tile38-ts: TypeScript client for Tile38 geo-database
- tidwall/tinyqueue: Binary heap priority queues in Go (port)
- A practical introduction to PostgreSQL in Go
- Don’t make databases available on the public internet: Introducing pgproxy
CLI
- jblindsay/go-spatial: GoSpatial is a simple command-line interface program for manipulating geospatial data
- tschaub/gpq: A utility for working with GeoParquet
Geocoding
- rubenv/opencagedata: Go bindings for OpenCage Geocoder
- codingsince1985/geo-golang: Go library to access geocoding and reverse geocoding APIs
Formats
- rubenv/topojson: TopoJSON implementation in Go
- apache/arrow/go: Apache Arrow for Go
OSM
- paulmach/osm: General purpose library for reading, writing and working with OpenStreetMap data
- maguro/pbf: OpenStreetMap PBF golang parser
- qedus/osmpbf: OpenStreetMap PBF file format parser in Go Lang.
- flopp/go-staticmaps: A go (golang) library and command line tool to render static map images using OpenStreetMap tiles
- glaslos/go-osm: osm file parser in golang
- thomersch/gosmparse: Processing OpenStreetMap PBF files at speed with Go
- tidwall/osmfile: A downloader and reader for the OSM planet files.
- pelias/pbf2json: An OpenStreetMap pbf parser which exports json, allows you to cherry-pick tags and handles denormalizing ways and relations. Available as a standalone binary and comes with a convenient npm wrapper.
- qedus/osmpbf: OpenStreetMap PBF file format parser in Go Lang.
- omniscale/imposm3: Imposm imports OpenStreetMap data into PostGIS
- codesoap/osmar: A simple command line tool to explore osm data
Other Libraries
- sfomuseum/go-tilezen
- sfomuseum/go-http-protomaps: go-http-protomaps is an HTTP middleware package for including Protomaps.js assets in web applications
- sfomuseum/go-www-geotag: A web application, written in Go, for geotagging images
- whosonfirst/go-geojson-svg
- fapian/geojson2svg
- wroge/wgs84: A pure Go package for coordinate transformations.
- protomaps/go-pmtiles: concurrent caching proxy and decoder library for collections of PMTiles
- tidwall/mvt: Draw Mapbox Vector Tiles (MVT) in Go
- Geohash in Golang Assembly
- mmcloughlin/globe: Globe wireframe visualizations in Golang
Examples
- Rendering a map using Go, Mapbox and OpenStreetMap
- How We Built Uber Engineering’s Highest Query per Second Service Using Go
- "Instead of indexing the geofences using R-tree or the complicated S2, we chose a simpler route based on the observation that Uber’s business model is city-centric; the business rules and the geofences used to define them are typically associated with a city. This allows us to organize the geofences into a two-level hierarchy where the first level is the city geofences (geofences defining city boundaries), and the second level is the geofences within each city."
- Unwinding Uber’s Most Efficient Service
- Running Geo Queries At Scale
- Running a Serverless Vector Tile Backend with AWS Lambda and Go
- Geospatial queries, reinvented
- Building a Geospatial cache in Go
- Updating the Who's On First Browser to support Tailscale and Protomaps
Data Formats
JSON
- JSON-to-Go: Convert JSON to Go struct
- Building a high performance JSON parser
- francoispqt/gojay: fastest JSON encoder/decoder with powerful stream API for Golang
- itchyny/gojq: Pure Go implementation of jq
- ohler55/ojg: Optimized JSON for Go
- "For nice looking and well organized code using functions are highly recommended but for high perfomance find a way to reduce function calls."
- "Slices are implemented very efficiently in Go. Appending to a slice has very little overhead. Reusing slices by collapsing them to zero length is a great way to avoid allocating additional memory. Care has to be taken when collapsing though as any cells in the slice that point to objects will now leave those objects dangling or rather referenced but not reachable and they will never be garbage collected. Simply setting the slice slot to nil will avoid memory leaks."
Apache Arrow
Graphics
Images
- Libraries
- bradymadden97/go-quads: Pixel art using quad trees in Go
- davidbyttow/govips: A lightning fast image processing and resizing library for Go
- h2non/bimg: Small Go package for fast high-level image processing using libvips via C bindings, providing a simple, elegant and fluent programmatic API
- h2non/imaginary: Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing
- disintegration/imaging: Imaging is a simple image processing package for Go
- fhs/go-netcdf: Go binding for the netCDF C library
- photoprism/photoprism: Photos App powered by Go and Google TensorFlow
- hybridgroup/gocv: Go package for computer vision using OpenCV 4 and beyond
- imgproxy/imgproxy: Fast and secure standalone server for resizing and converting remote images
- esimov/caire: Content aware image resize library
- anthonynsimon/bild: Image processing algorithms in pure Go
- nfnt/resize: Pure golang image resizing
- esimov/triangle: Convert images to computer generated art using delaunay triangulation
- esimov/pigo: Fast face detection, pupil/eyes localization and facial landmark points detection library in pure Go.
- tidwall/pinhole: 3D Wireframe Drawing Library for Go
- llgcode/draw2d: 2D rendering for different output (raster, pdf, svg)
- cshum/imagorvideo: imagor thumbnail server in Go and ffmpeg C bindings
- cshum/imagor: Fast, Docker-ready image processing server in Go with libvips
- How I made a slick personal logo with Go's standard library
- How to Pixelate Images in Go
- engelsjk/turbocharger: A CLI tool to apply colormap stylings to an image.
Color
- dim13/colormap
- implementations of magma, inferno, plasma and viridis
- engelsjk/colormap: A minimal color mapping package in Go.
- Baldomo/paletter: CLI app and library to extract a color palette from an image through clustering
Draw
- tdewolff/canvas: Cairo in Go: vector to SVG, PDF, EPS, raster, HTML Canvas, etc.
- fogleman/gg: Go Graphics - 2D rendering in Go with a simple API.
IO
- Introduction to bufio package in Golang
- grab : Downloading the internet, one goroutine at a time!
- Reading files in Go — an overview
Protocol Buffers & gRPC
- Beginners Guide to gRPC in Go!
- Writing a microservice in Golang which communicates over gRPC
- A practical guide to protocol buffers (Protobuf) in Go (Golang)
- Getting Started with Protocol Buffers in Go
- Building High Performance APIs In Go Using gRPC And Protocol Buffers
- gRPC Motivation and Design Principles
- Let's "Go" and build an Application with gRPC
- bufbuild/buf: A new way of working with Protocol Buffers.
Libraries
- molecule : Molecule is a Go library for parsing protobufs in an efficient and zero-allocation manner
Containers
- Building a container from scratch in Go - Liz Rice (Microscaling Systems)
- Containers the hard way: Gocker: A mini Docker written in Go
- Build Containers From Scratch in Go (Part 1: Namespaces)
Numerical Computing
Science & Simulation
- konimarti/kalman: Adaptive Kalman filter in Golang
- GoPlus - The Go+ language for data science
- cpmech/gosl: science library
- burrowers/garble: Obfuscate Go builds
- Daniel-M/odeint: Ordinary Differential Equations integrators in Go
Machine Learning
- galeone/tfgo: Tensorflow's Go bindings are hard to use: tfgo makes it easy!
- Go Tensorflow
- Building a neural network from scratch in Go
- sjwhitworth/golearn: Machine Learning for Go
- gorgonia/gorgonia: Gorgonia is a library that helps facilitate machine learning in Go.
- cdipaolo/goml: On-line Machine Learning in Go (and so much more)
CLI's & GUI's
Libraries
- spf13/cobra: A Commander for modern Go CLI interactions
- urfave/cli: A simple, fast, and fun package for building command line apps in Go
- peterbourgon/ff: Flags-first package for configuration
- fyne: Cross platform GUI in Go based on Material Design
TUIs
- jroimartin/gocui: Minimalist Go package aimed at creating Console User Interfaces.
- qustavo/httplab: The interactive web server
- nsf/termbox-go: Pure Go termbox implementation
- gdamore/tcell: Tcell is an alternate terminal package, similar in some ways to termbox, but better in others.
- Text-Based User Interfaces
Spinners & Progress Bars
- vbauerster/mpb: multi progress bar for Go cli applications
- briandowns/spinner: Go (golang) package with 70+ configurable terminal spinner/progress indicators.
- cheggaaa/pb: Console progress bar for Golang
- schollz/progressbar: A really basic thread-safe progress bar for Golang applications
- A simple example on implementing progress bar in GoLang
Examples
Learn
- Cobra
- Creating go CLI applications using Cobra
- How to Build Great CLI’s in Golang, One Snake at a Time
- Sting of the Viper: Getting Cobra and Viper to work together
- Charming Cobras with Bubbletea - Part 1
- How to Configure CLI Tools in Standard Formats with Viper in Golang
- A simpler building block for Go CLIs
- Building and distributing a command line tool in Golang
- Building a Chess GUI with Fyne (and Go)
- andydotxyz/chess: A chess GUI build using the Fyne toolkit.
- GoLang Desktop App with webview/Lorca, WASM and Bazel
- Carolyn Van Slyck - Design Command-Line Tools People Love (GopherCon 2019)
- Design Goals
- Predictable
- Task oriented
- Friendly to both people and scripts
- High quality
- Pick your grammar
- Understand precedent in your ecosystem
- Commands that read like sentences are easier to remember
- Avoid positional arguments where order matters
- Support automation on your commands
- Default to human first output
- Sometimes the resource is implicit in the domain
- Aliases provide balance between brevity and discoverability
- Customize your help text
- Give people a single command to perform a task
- Make functions that correspond 1:1 to the commands in your CLI
- Create little packages for everything
Databases
- Bolt DB: An embedded key/value database for Go.
- Storm: Simple and powerful toolkit for BoltDB
- tidwall/buntdb: BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support
- nutsdb/nutsdb: A simple, fast, embeddable, persistent key/value store written in pure Go. It supports fully serializable transactions and many data structures such as list, set, sorted set.
- buraksezer/olric: Distributed in-memory object store. It can be used both as an embedded Go library and as a language-independent service.
- pressly/goose: A database migration tool. Supports SQL migrations and Go functions.
- kyleconroy/sqlc: Generate type-safe code from SQL
- golang-migrate/migrate: Database migrations. CLI and Golang library.
Postgres
- ??? popular SQLite driver is in CGo, longer build times and binaries have more constraints; Postgres driver is pure Go
- Backend master class: PostgreSQL, Golang and Docker
- CockroachDB: The Challenges of Writing a Massive and Complex Go Application
- hashicorp/go-memdb: Golang in-memory database built on immutable radix trees
- Build a Simple CRUD Go App with CockroachDB and the Go pgx Driver
- CockroachDB Serverless: Build What You Dream, Never Worry About Your Database Again
SQLite
Filesystems & Storage
- seaweedfs/seaweedfs: SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding.
- ipfs/kubo: IPFS implementation in Go
- Blob
- gokrazy/rsync?: gokrazy rsync
Noise
- ojrac/opensimplex-go: A port of Kurt Spencer's OpenSimplex to Go
- dbriemann: Making a game with Go and Pixel: #2 Procedural Content Generation (PCG)
Performance & Size
- A tool to analyze and troubleshoot a Go binary size
- gops: a tool to list and diagnose Go processes currently running on your system
- Go Performance Observations
- Best Practices for Speeding Up JSON Encoding and Decoding in Go
- High Performance Go Workshop
- Escape-Analysis Flaws
Profiling & Benchmarking
- Dave Cheney - Two Go Programs, Three Different Profiling Techniques (GopherCon 2019)
- An Introduction to Benchmarking Your Go Programs
- Profile your golang benchmark with pprof
- The Busy Developer's Guide to Go Profiling, Tracing and Observability
Optimization
Allocation & Memory
- Golang and Memory
- How we tracked down (what seemed like) a memory leak in one of our Go microservices
- Allocation efficiency in high-performance Go services
- Go memory ballast: How I learnt to stop worrying and love the heap
- Maps and Memory Leaks in Go
-
TL;DR: A map can always grow in memory; it never shrinks. Hence, if it leads to some memory issues, you can try different options, such as forcing Go to re-create the map or using pointers.
- Faster Go code by being mindful of memory
Garbage Collection
- Garbage Collection In Go : Part I - Semantics
- Go: How Does the Garbage Collector Watch Your Application?
Projects
- How We Created a Realtime Patient Monitoring System With Go and Vue in 3 days
- "Starting with Vuetify we worked on a custom layout which is similar to a bedside monitor interface. Using Vuex for state management we also developed a priority-based alarm service which alarms the staff on any critical condition."
- Build and Deploy a secure REST API with Go, Postgresql, JWT and GORM
- Cloning Memcached with Go
Security
- Blackrota Golang Backdoor Packs Heavy Obfuscation Punch
- The Gopher in the Room: Analysis of GoLang Malware in the Wild
- Finding Evil Go Packages
Hugo
- Twitter cards partials for Hugo
- Anchored Headings in Hugo
- Adam Wills Hugo Boilerplate
- Hugo: A Different Twitter Shortcode
- IndieWebify Your Hugo Website
- How I Created My Photos Page in Hugo
- Hugo - Create Page to View All Your Posts
- mfg92/hugo-shortcode-gallery: A theme components with a gallery shortcode for the static site generator hugo.
Themes
Theme: Congo
- jamespanther.com/
- antoinesoetewey.com/
- leif.io/
- dr460nf1r3.org/
- ocram85.com
- jamesmillner.dev
- jeremic.ca
- datanalyze.be
- ruihao-li.github.io
Games
- avelino/awesome-go#game-development
- Boids in WebAssembly Using Go
- healeycodes/boids: The boids flocking simulation in Wasm using Ebiten!
- m110/airplanes: A 2D shoot 'em up game made with Go, Ebitengine, and donburi. Featuring ECS (Entity Component System).
- healeycodes/conways-game-of-life
- jakubDoka/mlok: golang powered game engine
- faiface/pixel: A hand-crafted 2D game library in Go
- ebiten.org: Ebiten is an open source game library for the Go programming language.
- KorokEngine/Korok: korok.io - golang game engine
- g3n/engine: Go 3D Game Engine
- demos/other/skybox
- shader/earth
Misc
Libraries
- cosmtrek/air: Live reload for Go apps
- mholt/timeliner: All your digital life on a single timeline, stored locally
- jaeles-project/gospider: Gospider - Fast web spider written in Go
- afk11/airtrack: Aircraft tracking software with database support, email notifications, browser based map, etc
- owulveryck/goMarkableStream: A toy project to stream from a Remarkable2
- nakabonne/pbgopy: Copy and paste between devices
- kochampsy/fractal: A small mandelbrot set renderer in Go
- shomali11/go-interview: Collection of Technical Interview Questions solved with Go
- DataDog/go-profiler-notes: felixge's notes on the various go profiling methods that are available.
- pdfcpu/pdfcpu: A PDF processor written in Go.
- cosmtrek/air: A high-performance and strong-extensibility Go HTTP framework that helps developers build microservices.
- orisano/pixelmatch: mapbox/pixelmatch ports for go.
- dstotijn/hetty: Hetty is an HTTP toolkit for security research.
- ent/ent: An entity framework for Go
- GoogleCloudPlatform/golang-samples: Sample apps and code written for Google Cloud in the Go programming language.
- Watermill: Go library for building event-driven applications.
- screego/server: screen sharing for developers
- plane-watch/pw-pipeline: Takes in ADSB information and churns out JSON
- kylhuk/adex-crawler: aka. a very complicated way on getting the adsb data.
- regnull/kalman: Kalman filter implementation for geographical coordinates
Reading
- Build An Alexa Skill With Golang And AWS Lambda
- An Adventure into CGO — Calling Go code with C
- Bit Hacking with Go
- Optimized abs() for int64 in Go
- Go is Boring...And That’s Fantastic!
- New Case Studies About Google’s Use of Go
- How to avoid Go gotchas
- Learn Go by Building a Bus Service
- Idiomatic Go
- Golang Web Scraping Strategies and Frameworks
- Sorting Algorithms in Go
- Executing shell commands, script files, and executables in Go
- Writing slower Go programs
- Getting Started With WebAssembly and Go By Building an Image to ASCII Converter
- 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs
- 3 Pitfalls in Golang I Wish I Had Known Earlier
- Bloom effect in Go
- Comparing floating point numbers in Golang
- An intro to Go for non-Go developers
- Portable apps with Go and Next.js
- Let's Go! Learn to Build Professional Web Applications With Golang
- GoLang: Running a Go binary as a systemd service on Ubuntu 18.04 in 10 Minutes (without Docker)
- Building your own Ngrok in 130 lines
- Blog Project with Go, Gin, MySQL and Docker - Part 1
- Socket sharding in Linux example with Go
- Iterators, Map, Filter, Reduce and list processing in Go (Golang) : implementing Python functional features.
- stackoverflow: Serve image in Go that was just created
- Raspberry Pi GPIO in Go and C - RGB LED
- youngzhu/algs4-go: Algorithms, 4th Edition, Go version
- Simple and Easy in-memory cache in Golang
- Distributing prebuilt Go binaries on Github with Gox
- The Ultimate Go Notebook
- Data Science and the Go Programming Language
- Hacking with Go
- A GC-Friendly Go Interning Cache
- Building a BitTorrent client from the ground up in Go
- Building a custom code search index in Go for searchcode.com
- Unit Testing with the AWS SDK for Go V2
- Smart Contracts Using Solidity and Go: Basic Contract
- A Very Basic Scraper/Aggregator Site in Next.js with Go Cloud Functions and Supabase
Watching
- Gophercon 2020
- The Challenges of Writing a Massive and Complex Go Application
- The Why of Go
- Introduction to microservices (Ep. 1)
- GopherCon 2019: Elena Morozova - How Uber Goes
- GopherCon 2019: Elias Naur - Portable, Immediate Mode GUI Programs for Mobile and Desktop in 100% Go
- GopherCon Europe 2019: Ellen Körbes - Learn Neural Networks With Go, Not Math
- Simulating A Real-World System (Coffee Shop) In Go
- Go Remote Fest 2020: Robert Laszczak - Let's build event-driven application in 15 minutes
Mascot
Applications
- Wails v2: Build beautiful cross-platform applications using Go
Logging
- rs/zerolog: Zero Allocation JSON Logger
- uber-go/zap: Blazing fast, structured, leveled logging in Go.
- sirupsen/logrus: Structured, pluggable logging for Go.
- spf13/jwalterweatherman: So you always leave a note
Orbitals & Ephemerides
- joshuaferrara/go-satellite: Calculate orbital information of satellites in GoLang.
- ChristopherRabotin/smd: Space Mission Design - A SPICE-enhanced continuous thrust interplanetary mission propagator and vizualizer