Generics é um conceito utilizado em linguagens O.O em que podemos definir classes, métodos e 
                interfaces que aceitam tipos de dados como argumento. Assim, não precisamos escrever código 
                para cada tipo de dado.
            
            
                No exemplo abaixo, sem utilizar generics, temos que declarar duas funções de adição para 
                os tipos de dados int e float. 
            
            Exemplo 1
            
package main
import (
	"fmt"
)
//sem generics
func addInt(a int, b int) int {
	return a + b
}
//sem generics
func addFloat(a float32, b float32) float32 {
	return a + b
}
func main() {
	fmt.Println(addInt(1, 1))
	fmt.Println(addFloat(1.4, 1.5))
}
            Saída
            -
            
                Como pode ser observado, duas funções foram codificadas para atender a adição de dois valores 
                inteiros e floats. Como consequência, foi necessário a repetição de código do retorno em ambas 
                as funções, por exemplo.
            
            
                Fazendo uso de generics, codificamos apenas um função com os possíveis tipos de dados aceitos 
                por uma função:
            
            Sintaxe: função
            
func nome_funcao[T tipo_dado1 | tipo_dadoN]( <lista_parametros> T) T {
  //...
}
            Sintaxe: variável local
            
var nome_variavel T
            Onde
            
T: indicador de uso de generics
tipo_dado1..N: tipo de dado aceito como argumento para T
            Exemplo 2
            
package main
import (
	"fmt"
)
//com generics
func add[T int | float32 | float64](a T, b T) T {
	return a + b
}
func main() {
	fmt.Println(add(1, 1))
	fmt.Println(add(1.4, 1.5))
}
            Saída
            2
2.9
            
                Os tipos de dados utilizada com os parâmetros da função genérica devem suportar as operações 
                aplicados sobre eles.  No exemplo acima, a operação de adição é suportada pelos tipos numéricos.
                Porém, tipos complexos definidos pelo usuário não suportam esse operador.