Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Go 1Instituto Federal de Minas Gerais – Campus Bambuí Bambuí – MG – Brasil 1Departamento de Engenharia de Computação Abstract. In response to some computing problems in infrastructure development such as the insertion of multiple processors, distributed systems, web computing model and mass computing, Google has developed a language that encompasses the best features of programming languages to meet the need for a clean code, fast and runs on multiple platforms without any problem, to Golang (Go). Resumo. Em resposta à alguns problemas da computação no desenvolvimento de infraestrutura, como a inserção de múltiplos processadores, sistemas distribuídos, modelo de computação na web e computação massiva, a Google desenvolveu uma linguagem que engloba as melhores características de linguagens de programação para suprir a necessidade de um código limpo, rápido e que executa em múltiplas plataformas sem nenhum problema, a Golang(Go). 1. Introdução Go é uma linguagem de programação criada pela Google e lançada em código livre em novembro de 2009. O projeto inicial da linguagem foi feito em setembro de 2007 por Robert Griesemer, Rob Pike e Ken Thompson como um projeto interno no escritório da Google. Foi lançada em 2009, porém ficou em fase de testes até 2011, na chamada Fase Pré-Go. Atualmente, há implementações para Windows, Linux, Mac OS X e FreeBSD. “Go é expressivo, conciso, limpo e eficiente. Seus mecanismos de concorrência tornam mais fácil escrever programas que tirarão o máximo proveito de vários núcleos e máquinas em rede, enquanto o seu novo sistema de tipos permite a construção flexível e modular do programa. Go compila rapidamente para código de máquina ainda tem a conveniência de garbage collection e o poder de reflexão em tempo de execução. É uma linguagem compilada rápida, de tipagem estática, que parece uma linguagem interpretada digitada de forma dinâmica.” (Golang Brasil, 2017). Go veio para sanar a necessidade de uma linguagem de programação que resolva as dificuldades de linguagens que demoram um bom tempo para compilar e escalar o desenvolvimento de grandes aplicações. A linguagem tornou o desenvolvimento dos servidores da Google em algo mais eficiente e bastante produtivo, utilizando um controle rigoroso e inteligente de suas dependências. 2. Características da linguagem A linguagem de programação Go é uma linguagem compilada, tem seu próprio Go Runtime(característica parecida com Java), é uma linguagem multiplataforma de sintaxe simples e orientada a objetos, apesar de não haver herança. Estaticamente e fortemente tipada, é uma linguagem de forma concorrente, aproveitando o máximo possível de sistemas multi threads, com funções de múltiplos retornos e ponteiros, porém não oferece aritmética de ponteiros. Não faz parte desta linguagem tratamento de erros e sobrecarga de métodos. A linguagem Go, foi inspirada na linguagem C, mas além disso ela possui características que fazem a diferença, como por exemplo a abstração para estruturas de dados e Garbage Collection (Evita o acúmulo de lixo na memória durante a execução do programa). Os paradigmas desta linguagem são: ● Compilada: Utiliza o compilador Gc ou GccGO. ● Concorrente: Executa várias tarefas de modo concorrente utilizando programas separados ou várias threads para compilar um único programa. ● Imperativa: O computador executa as instruções do código. ● Estruturada: Para criação de estruturas simples são utilizadas su-rotinas e funções. Outra característica que difere a linguagem Go para C, é a ausência de parênteses nas estruturas IF e FOR... 3. Vantagens/Desvantagens A linguagem de programação Go como todas as outras linguagens tem suas vantagens e desvantagens. As suas principais vantagens atribuem-se principalmente o desempenho, como a linguagem é baseada em C ela é altamente otimizada, outro ponto forte da linguagem é a simplicidade, a linguagem Go tem como foco principal a velocidade, foram removidos alguns recursos de linguagem de alto nível para que tal foco fosse alcançado. São inúmeras as vantagens de se utilizar a linguagem, compilação muito rápida, linguagem fortemente tipada, concorrência é também um ponto forte(IMASTERS). Para que a linguagem seja tão rápida quanto o esperado foram removidos alguns recursos, tais como tratamento de exceção, herança, programação genética e sobrecarga, embora tenham sido removidos para otimizar o desempenho da linguagem alguns programadores vêm isso como desvantagem(IMASTERS). 4. Estrutura da linguagem A linguagem Go tem uma sintaxe semelhante a linguagem C, porém com várias diferenças nas declarações, no uso de funções, na criação de estruturas de dados, na forma como trata entrada e saída de dados, entre outras variações. A linguagem Go não dá suporte para classes, como em java ou C++, porém, ela permite que o programador desenvolva estruturas de dados, também presentes em C++ e em outras linguagens orientadas a objeto. A estrutura de dados em Go, guarda um estado,não tendo comportamento(TUTSPLUS). O exemplo abaixo mostra uma estrutura Carro com um atributo para a cor e outro para o tipo de combustível utilizado. 1. type Carro struct { 2. Cor string 3. Tipo_Combustivel string 4. } Métodos em Golang são como funções, só que operam apenas para determinados objetos, sendo que, na declaração do método(assinatura), é explícito o tipo do objeto ao qual o método opera. Abaixo, um exemplo de um método que opera com o objeto do tipo Carro, onde imprime a cor e o tipo de combustível do veículo. 1. func (c Carro) mostra_informacao{ 2. fmt.Printf(“Este carro é da cor %s e utiliza %s para se mover”, c.Cor, c.Tipo_Combutivel) 3. } Outro importante tipo de dados de Golang são as interfaces. Elas são conjuntos de métodos, que podem ser utilizados por objetos de que implementam estes métodos, da mesma forma como funcionam interfaces em outras linguagens orientadas a objetos. Abaixo está um exemplo simples de uma interface em Golang. 1. type Cores interface{ 2. verde() 3. vermelho() 4. amarelo() 5. } 6. 7. type Semaforo struct{ 8. } 9. 10. func (s Semaforo) verde{ 11. fmt.Printf(“VERDE”) 12. } 13. func (s Semaforo) vermelho{ 14. fmt.Printf(“VERMELHO”) 15. } 16. fun (s Semaforo) amarelo{ 17. fmt.Printf(“AMARELO”) 18. } Golang possui uma quantidade significativa de bibliotecas, abaixo está uma tabela com algumas dessas bibliotecas e suas funcionalidades: ARCHIVE biblioteca usada para trabalhar com arquivos, como extensão para .tar e .zip BUFIO Implementa E/S com buffer. Possui o objeto io.Reader ou io.Writer, que também implementa a interface, mas que fornece ajuda com E/S textual. CONTAINER Pacote com suporte para pilhas e listas, onde o pacote para lista, implementa uma lista duplamente encadeada. SQL O pacote Sql oferece uma interface genérica em torno de bancos de dados SQL. ELF Implementa o acesso a arquivos de objeto ELF XML O pacote Xmlimplementa um analisador XML 1.0 simples, que compreende espaços de nome XML. FMT Implementa E/S formatada com funções análogas ao Printf e Scanf presentes em C. Go também suporta funções recursivas. Abaixo, mostramos o uso de uma função recursiva para o problema fatorial(GOLANGBR): 1. import “fmt” 2. func fact(n int) int{ 3. if n == 0 { 4. return 1 5. } 6. return n* fact(n-1) 7. } 8. 9. func main(){ 10. fmt.Println(fact(7)) 11. } Para a entrada de dados, utiliza-se Scanln, método da biblioteca fmt, que se assemelha a função Scanf de C. Do mesmo modo, para saída de dados, utiliza-se o método Println, que se assemelha ao Printf de C. 5.Ortogonalidade Portabilidade e Tipos de dados Quando um conjunto relativamente pequeno de construções primitivas é combinado a um número relativamente pequeno de formas se tem a ortogonalidade, essa técnica é usada com o intuito de possibilitar um grande número de estrutura de dados. A Ortogonalidade e fortemente ligada a simplicidade, quanto mais ortogonal o projeto de uma linguagem, menor o número necessário de exceções às regras da linguagem. Retirado de :https://golang.org/ A portabilidade consiste na facilidade com que os programas podem ser movidos de uma implementação para outra, a portabilidade na maioria das vezes é fortemente influenciada pelo grau de padronização da linguagem, algumas linguagens, como o BASIC, não sao padronizadas, fazendo os programas que são escritos nessas linguagens serem difíceis de mover de uma implementação para outra(SEBESTA). Quanto aos tipos de dados, a linguagem go trabalha com os tipos, boolean, numérico e string, esses são os tipos de dados primitivos usados pela linguagem, quanto aos tipos compostos, são eles, struct, ponteiros, arrays, slices e funções. 6. Outro Pontos Importantes Golang é distribuído sob a licença BSD, o que significa que tal projeto pode ser incorporado a qualquer produto proprietário, assim como trabalhos podem ser liberados com licença de proprietário. Golang tem como raízes o C, que é uma linguagem compilada para propósitos gerais, que compõem o paradigma imperativo, com características estruturais, procedurais e padronizadas. Desta forma, Golang também tem como paradigma o imperativo, que segue a idéia de que os programas são como ações e comandos que mudam os estados de um programa, assim como o paradigma de programação estruturado, que definas as três estruturas básicas de qualquer programa(sequências,decisões e iterações). Golang também possui o paradigma de programação procedural, que prediz o funcionamento do programa por chamadas a procedimentos, como rotinas e subrotinas, assim como, Golang possui o paradigma de programação orientado a objetos, apesar de que, não existam classes em Go, ela dá suporte a estruturas, interfaces, encapsulamentos e polimorfismos(SEBESTA,2003). A versão do projeto de Golang é a Go 1, que está atualmente na versão 1.2. Na descrição do projeto do Go 1, eles diziam que um código gerado naquela versão rodaria a vida toda, mesmo havendo novas mudanças em futuras versões da linguagem. Porém, para a nova versão, eles acusam o conhecimento de que certas mudanças ocasionaram em mal funcionamentos de programas feitos em versões anteriores, mas o projeto irá dar suporte a qualquer problema relacionado a compatibilidade de versões. 7. Conclusão Quando a Google reuniu grandes nomes da computação atual para desenvolver um projeto de uma nova linguagem de programação, tinham a proposta de fornecerem uma linguagem fácil e funcional, com suporte a grandes recursos de outras linguagens, tanto como a correção de erros e a remoção de funcionalidades presentes em antigas linguagens de programação, fazendo assim com que Go se tornasse rápida e poderosa. Sendo uma genuína linguagem orientada a objetos, Golang dá suporte ao programador para modelar suas situações e prover boas implementações, utilizando de interfaces ao invés de tipos concretos(TUTSPLUS). A finalidade de Go sempre foi ser uma linguagem desenvolvida do zero, economicamente viável, que desse suporte ao que importa, assim levando a google a definir diretrizes para a linguagem como programação concorrente, alto desempenho, sendo otimizada, multiplataforma, permitindo a escalabilidade ser feita de maneira simples,com o foco na velocidade e simplicidade(IMASTERS). Com um projeto complexo e bem definido, Golang está no conceito de linguagens de alto nível, com melhorias significativas em relação a outras linguagens de mesmo conceito, com otimizações na gerência de memória e no processamento. Um bom exemplo disso são as recursividades em Go, muito utilizadas e que compõem grande parte das soluções matemáticas desenvolvidas, é de grande capacidade de processamento e velocidade de computação. 8. Referências IMASTERS; Trabalhando com go(golang a linguagem do google); Disponível em: <https://imasters.com.br/linguagens/trabalhando-com-go-golang-a-linguagem-do-googl e/?trace=1519021197>. Acesso em: Março de 2017. GOLANG; A Linguagem de Programação Go; Disponível em: <http://www.golangbr.org/projeto/>. Acesso em: Março de 2017. TUTSPLUS. Vamos lá: Programação orientada a objetos em Golang. Disponível em:https://code.tutsplus.com/pt/tutorials/lets-go-object-oriented-programming-in-golang --cms-26540. Acesso em: Março de 2017. SEBESTA, R.W. (2003). Conceitos de Linguagens de Programação. Editora BOOKMAN. 9ª edição.
Compartilhar