Home >Backend Development >Golang >Specific application scenarios of generics in golang
Application scenarios of generics in Go: Collection operations: Create collection operations suitable for any type, such as filtering. Data Structures: Write general-purpose data structures such as queues, stacks, and maps to store and manipulate various types of data. Algorithms: Write general-purpose algorithms such as sorting, search, and reduction that can handle different types of data.
Generics are a major feature introduced in Go 1.18, which allows us to use them in the type system type variable. This provides powerful capabilities for code reuse and redundancy reduction, especially when implementing common data structures or algorithms.
Using generics, we can easily create set operations that apply to any type T. For example:
func Filter[T any](slice []T, pred func(T) bool) []T { var filtered []T for _, v := range slice { if pred(v) { filtered = append(filtered, v) } } return filtered }
Generics can help us write common data structures, such as queues, stacks or maps. These data structures can store and manipulate various types of data, providing greater flexibility.
type Queue[T any] struct { items []T } func (q *Queue[T]) Enqueue(item T) { q.items = append(q.items, item) } func (q *Queue[T]) Dequeue() T { item := q.items[0] q.items = q.items[1:] return item }
Generics also allow us to write general algorithms, such as sorting, search, or reduction operations. These algorithms can handle different types of data, ensuring code reusability and maintainability.
func Sort[T any](slice []T) []T { sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) return slice }
Consider a Customer
structure containing different types of data:
type Customer struct { ID int Name string Age int Score float64 }
We can use generics to write a Generic SortCustomers
function to sort customers based on any field:
func SortCustomers[T comparable](customers []Customer, field T) []Customer { sort.Slice(customers, func(i, j int) bool { return customers[i][field] < customers[j][field] }) return customers }
This function can sort based on customer ID, name, age or score, as shown below:
sortedByID := SortCustomers(customers, customers[0].ID) sortedByName := SortCustomers(customers, customers[0].Name)
The above is the detailed content of Specific application scenarios of generics in golang. For more information, please follow other related articles on the PHP Chinese website!