Giter VIP home page Giter VIP logo

go-generics-the-hard-way's Introduction

Go generics the hard way

I started using Go back around 2015 and was immediately surprised by the lack of any type of generic type system. Sure, the empty interface{} existed, but that was hardly the same. At first I thought I wanted needed generics in Go, but over time I began appreciating the simplicity of the language. So when I learned of discusisons to introduce generics in Go 2.0, I was ambivalent at best. Once the timetable to introduce generics was accelerated to Go 1.18, I decided it was time to take a closer look at the proposal.

After spending some time playing with them, I began to appreciate how generics in Go have been designed and implemented with the same elegance and simplicity as Go itself. I hope you will agree, and to that end, this repository is a hands-on approach to learning all about generics in Go.

  • Labs: a hands-on approach to learning Go generics
  • FAQ: answers to some of the most frequently asked questions regarding Go generics
  • Links: links to related reference material and projects that use generics

Labs

  1. Prerequisites: how to install the prerequisites required to run the examples in this repository
  2. Hello world: a simple example using generics
  3. Getting started: an introduction to go generics
  4. Getting going: basic concepts explored
  5. Internals: how generics are implemented in golang
  6. Benchmarks: basic benchmarks for common patterns using generics

FAQ

How are you using generics in the Go playground?

While it is true that the Go playground uses the most recent, stable release of Go, there is also a Go playground that uses the tip at https://gotipplay.golang.org, and this playground supports generics.

What is T?

The symbol T is often used when discussing generic types because T is the first letter of the word type. That is really all there is too it. Just like x or i are often the go-to variable names for loops, T is the go-to symbol for generic types.

For what is worth, K is often used when there is more than one generic type, ex. T, K.

What is this any I keep seeing everywhere?

The word any is a new, predeclared identifier and is equivalent to the empty interface in all ways. Simply put, writing and reading any is just more user friendly than interface{} ๐Ÿ˜ƒ.

What does the tilde ~ do?

The ~ symbol is used to express that T may be satisfied by a concrete type directly, by implementation, or via type alias. To learn more about type constraints and the ~ symbol, please refer to the section Tilde ~.

Do Go generics use type erasure?

Generics in Go are not implemented with type erasure. Please jump to Internals for more information.

Links

Additional reading

Projects using generics

  • Controller-runtime: a write-up and patchset for implementing conditions logic, patch helpers, and simple reconcilers using generics

go-generics-the-hard-way's People

Contributors

akutz avatar

Watchers

 avatar

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.