| Generics |
| Go supports generic programming using type parameters. This lesson shows some examples for employing generics in your code. |
| |
| The Go Authors |
| https://golang.org |
| |
| * Type parameters |
| |
| Go functions can be written to work on multiple types using type parameters. The |
| type parameters of a function appear between brackets, before the function's |
| arguments. |
| |
| func Index[T comparable](s []T, x T) int |
| |
| This declaration means that `s` is a slice of any type `T` that fulfills the |
| built-in constraint `comparable`. `x` is also a value of the same type. |
| |
| `comparable` is a useful constraint that makes it possible to use the `==` and |
| `!=` operators on values of the type. In this example, we use it to compare a |
| value to all slice elements until a match is found. This `Index` function works |
| for any type that supports comparison. |
| |
| .play generics/index.go |
| |
| * Generic types |
| |
| In addition to generic functions, Go also supports generic types. A type can |
| be parameterized with a type parameter, which could be useful for implementing |
| generic data structures. |
| |
| This example demonstrates a simple type declaration for a singly-linked list |
| holding any type of value. |
| |
| As an exercise, add some functionality to this list implementation. |
| |
| .play generics/list.go |
| |
| * Congratulations! |
| |
| You finished this lesson! |
| |
| You can go back to the list of [[/tour/list][modules]] to find what to learn next, or continue with the [[javascript:click('.next-page')][next lesson]]. |