Go 1.20: Entenda os generics e suas vantagens

Olá, leitores! Neste post, vamos falar sobre as novidades do lançamento Go 1.20, a mais recente versão da linguagem de programação Go. Go é uma linguagem de propósito geral que combina simplicidade, eficiência e concorrência. Go 1.20 traz várias melhorias e novas funcionalidades que tornam o desenvolvimento em Go mais fácil e divertido. Vamos ver algumas delas:

  • Generics: Uma das funcionalidades mais esperadas pelos desenvolvedores Go, os generics permitem escrever funções e tipos que podem trabalhar com diferentes tipos de dados, sem perder a segurança e a performance. Os generics são implementados usando contratos, que especificam as propriedades que os tipos devem ter para serem usados em uma função ou tipo genérico. Por exemplo, podemos definir uma função genérica que soma dois valores de qualquer tipo numérico:
go
contract numeric(t T) {
t int, int8, int16, int32, int64,
uint, uint8, uint16, uint32, uint64, uintptr,
float32, float64,
complex64, complex128
}

func add[T numeric](x, y T) T {
return x + y
}

– Embedding: Outra novidade do Go 1.20 é a possibilidade de usar embedding em interfaces e structs. O embedding permite incorporar um tipo dentro de outro, sem precisar declarar explicitamente os campos ou métodos do tipo incorporado. Isso facilita a reutilização e a composição de tipos. Por exemplo, podemos definir uma interface que incorpora as interfaces io.Reader e io.Writer:

go
type ReadWriter interface {
io.Reader
io.Writer
}

– Error handling: O tratamento de erros em Go também ficou mais simples e expressivo com o Go 1.20. Agora é possível usar a cláusula handle para lidar com erros retornados por funções, sem precisar usar if ou defer. A cláusula handle recebe uma função que pode inspecionar e manipular o erro, ou retorná-lo para a função chamadora. Por exemplo, podemos usar handle para registrar e retornar um erro:

go
func copyFile(src, dst string) error {
r, err := os.Open(src)
handle err {
log.Printf("failed to open %s: %v", src, err)
return err
}
defer r.Close()

w, err := os.Create(dst)
handle err {
log.Printf("failed to create %s: %v", dst, err)
return err
}
defer w.Close()

_, err = io.Copy(w, r)
handle err {
log.Printf("failed to copy %s to %s: %v", src, dst, err)
return err
}

return nil
}

Essas são apenas algumas das novidades do Go 1.20. Para saber mais sobre essa versão incrível da linguagem Go, visite o site oficial. Esperamos que você tenha gostado deste post e que experimente o Go 1.20 em seus projetos. Até a próxima!

Share This Article
Follow:
Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.
Sair da versão mobile