Back-End

31 ago, 2017

Versão 1.9 da linguagem Go é lançada – confira detalhes

Publicidade

Artigo de Francesc Campoy, publicado originalmente pelo The Go Blog. A tradução foi feita pela Redação iMasters com autorização

***

No dia 24 de agosto, a equipe da linguagem Go anunciou o lançamento do Go 1.9. Você pode obtê-lo na página de download. Foram feitas muitas mudanças na linguagem, biblioteca padrão, tempo de execução e ferramentas. Este artigo cobre as mais visíveis e significativas. A maior parte do esforço de engenharia implementada nesse lançamento foi para melhorias no tempo de execução e ferramentas, o que  torna esse anúncio menos emocionante, mas trata-se de uma excelente versão.

A mudança mais importante na linguagem é a introdução de type aliases: um recurso criado para suportar o reparo gradual do código. Uma declaração tipo aliases tem o formulário:

 

type T1 = T2

 

Essa declaração introduz um nome de alias T1 para o tipo T2, da mesma forma que byte sempre foi um alias para uint8. O type alias design document e um artigo sobre refatoração cobrem essa adição com mais detalhes.

O novo pacote math/bits fornece funções de contagem e manipulação de bits para inteiros não assinados, implementados por instruções especiais da CPU sempre que possível. Por exemplo, nos sistemas x86-64, bits.TrailingZeros (x) usa a instrução BSF.

O pacote sync adicionou um novo tipo Map, seguro para acesso simultâneo. Você pode ler mais sobre isso na documentação e saber mais sobre por que foi criado a partir desta palestra do GopherCon 2017 (slides). Não é uma substituição geral para o tipo mapa de Go; consulte a documentação para saber quando ele deve ser usado.

O pacote testing também tem uma adição. O novo método Helper, adicionado a testing.T e testing.B, marca a função de chamada como test helper function. Quando o pacote de teste imprime informações de arquivo e linha, ele mostra a localização da chamada para uma helper function em vez de uma linha na própria helper function.

Por exemplo, considere este teste:

 

package p

import "testing"

func failure(t *testing.T) {
    t.Helper() // This call silences this function in error reports.
    t.Fatal("failure")
}

func Test(t *testing.T) {
    failure(t)
}

 

Como failure se identifica como um test helper, a mensagem de erro impressa durante o Test indicará a linha 11, onde failure é chamada, em vez da linha 7, onde failure chama t.Fatal.

O pacote time agora controla de forma transparente o tempo monotônico em cada valor de Time, tornando as durações de computação entre dois valores de Time uma operação segura na presença de ajustes de relógio de parede. Por exemplo, este código agora calcula o tempo decorrido até mesmo em uma segunda reinicialização do salto de tempo:

 

start := time.Now()
f()
elapsed := time.Since(start)

 

Veja os documentos de pacote e o documento do projeto para obter detalhes.

Finalmente, como parte dos esforços para tornar o compilador Go mais rápido, Go 1.9 compila funções em um pacote simultaneamente.

Go 1.9 inclui muitas outras adições, melhorias e correções. Encontre o conjunto completo de alterações e mais informações sobre as melhorias listadas acima nas release notes do Go 1.9.

Para celebrar o lançamento, grupos de usuários do Go ao redor do mundo estão fazendo algumas festas.

 

***

 

Este artigo é do The Go Blog. Ele foi escrito por Francesc Campoy. A tradução foi feita pela Redação iMasters com autorização. Você pode acessar o original em: https://blog.golang.org/go1.9