Aprendendo o básico de GOlang como um programador PHP

Breno Augusto Ribeiro Campos
Fretebras Tech
Published in
5 min readJan 11, 2022

Programar é uma arte das mais belas, é possível fazer literalmente qualquer coisa programando…

E como programadores estamos sempre tentando fazer de tudo um pouco. De acordo com a W3Techs, PHP é utilizado em aproximadamente 80% dos sistemas web, ele é literalmente utilizado para tudo!!

A cada problema que surge, instantaneamente pensamos em procurar “How to do {$something} in PHP”. A questão é que você provavelmente vai encontrar uma maneira de fazer que vai te atender, mas será que esta é a melhor maneira?

PHP é uma ótima linguagem, mas também não podemos ficar presos em somente uma abordagem!

GOLang é uma linguagem interessante, fácil de aprender e de usar, mas por que GOLang?

A primeira questão, pelo menos particularmente, é a incrível capacidade de executar coisas rápidas, é bem fácil encontrar diversos benchmarking entre Go e outras linguagens que sugerem que GOLang ganharia com facilidade.

Exemplos:

Server-side I/O Performance: Node vs. PHP vs. Java vs. Go

Benchmarks: Node.js vs Go (vs PHP)

Rohan-Jalil/golang-vs-php-vs-node-vs-python

Testando a performance de tecnologias especialistas em Rest API JSON uma abordagem em JAVA, PHP, C++, NODEJS, RUBY, PYTHON e GO

Não entrando muito no viés super técnico de quais computadores foram usados, quais versões, se foi replicado o mesmo ambiente etc… Ainda é interessante! E o interesse leva a gente a testar as coisas!

Aqui na FreteBras estamos sempre explorando novas técnicas e novas formas de resolver problemas. Internamente outros colegas de equipe (João Roberto, Dhyogo, Lucas etc) começaram a olhar para o GO verificando a possibilidade de melhorar alguns fluxos das aplicações.

Eu já estava bem interessado então não quis ficar para trás, quero saber pelo menos o básico para poder contribuir se houver a oportunidade. Então, essa é a minha visão de como aprender o básico de GOLang sendo um programador PHP.

Instalação:

Todo processo de instalação pode ser feito a partir da própria doc.

Link: https://golang.org/doc/install

Hello, World!!:

Versão PHP
Versão GO

A Linha 1 trata-se da definição do package. O pacote, conforme descrito pela própria linguagem, é uma maneira de agrupar funções em um mesmo diretório.

A Linha 2 trata-se da importação do pacote “fmt”, um pacote necessário para utilizar funções de formatação de texto e escrita no terminal.

A Linha 3 se trata da declaração da função main, a função main é executada automaticamente quando o package main é executado.

A Linha 4 é a execução da função fmt.Println(“Hello, World!!”), a função irá escrever uma mensagem e saltar uma linha.

Executando o script:

PHP: php file_name.php
GOLang: go run file_name.go

Declarando variáveis:

Versão PHP
Versão GO

Aqui temos algumas poucas diferenças…

PHP trata os tipos de variável de forma bem ampla, nas versões mais atuais e nos objetos a tipagem é até mais presente…

As variáveis são criadas a qualquer momento e sem nenhum tipo de sintaxe de declaração adicional, somente ”variável = valor”.

O primeiro exemplo do GO sugere uma forte sintaxe de declaração, entretanto ela não é obrigatória devido a existência do operador de atribuição e declaração “:=”.

Em GO não temos exatamente uma aplicação de POO(Programação orientada a Objetos) então não temos classes e objetos, mas em forma de organização, temos o conceito de structs, veja um exemplo aqui.

IF

Versão PHP
Versão GO

Aqui vemos poucas diferenças, só sumiram com alguns parênteses…

NULL values:

Em PHP alguns objetos e variáveis não inicializadas recebem o valor NULL.

Em GO temos algo semelhante, o identificador predefinido “nil”, não é bem um null, mas podemos pensar que sim? Talvez esse artigo te ajude a entender melhor…

Zero values:

Zero values é considerado o valor de uma variável que não foi atribuída, por exemplo, uma variável do tipo int, quando não atribuída, sempre valerá 0.

Veja aqui outros exemplos.

Arrays:

Versão PHP
Versão GO

Aqui entram algumas diferenças interessantes, PHP obviamente é uma mãe, seus arrays aceitam literalmente qualquer coisa.

Em GO isso parece ser mais rígido, tanto em tipificação quanto em delimitação de alocação de memória, o que inicialmente pode parecer muito triste para um jovem programador PHP…

Para contornar isso, existem as “slices”, diferente dos GO arrays, as slices “podem assumir tamanhos dinâmicos”, as aspas pois você sempre gera uma nova slice, por exemplo:

Versão GO

Aqui temos a declaração de um array de 6 posições contendo números primos.

Após isso, é criado uma slice “s” a partir do array “primes”, definindo o index inicial e o final.

Por fim, a função “append” adiciona o valor 11 e retorna um novo slice. Para entender melhor consulte https://tour.golang.org/moretypes/7 e https://tour.golang.org/moretypes/8

Result: [3 5 7 11]

Arrays associativos:

Versão PHP
Versão GO. Ref: https://tour.golang.org/moretypes/19

Note que aqui caímos em algumas quebras de conceito, mas elas são propositais, as divergências são mais a título de exemplo…

Perceba que GO não tem um conceito muito claro de array associativo como o do PHP, em GO, eles utilizam o “map”.

Na linha de atribuição da variável “m”, temos: “m = make(map[string]Vertex)”, vemos a sintaxe de criação de um map de string por vertex, perceba que Vertex é uma estrutura e no exemplo em PHP temos um objeto.

Não existe relação direta entre uma estrutura e um objeto, objetos envolvem um vasto conceito de POO e a bem grosso modo, estruturas são organizações da memória.

Como dito, somente a título de exemplificação…

Na linha seguinte, temos a atribuição de uma chave “Bell Labs” recebendo uma estrutura Vertex.

Por fim, temos a impressão do map “m” na chave “Bell Labs”.

Loops:

Versão PHP
Versão GO

Um fato claro a se perceber é que o GO não utiliza a declaração do while, o resto segue bem parecido.

Versão PHP
Versão GO

Em PHP temos o laço condicional foreach, já em GO, continuamos a usar o “for”, as diferenças não são tão grandes, mas temos a adição do “range” que informa ao “for” que ele deve iterar sobre a variável passada a frente, exemplos aqui.

Funções:

Versão PHP
Versão GO

No processo de declaração de funções também não existem grandes diferenças…

Porém, GO trás uma feliz “novidade”, múltiplos retornos em uma função.

O PHP já fazia isso através de objetos e arrays, mas não de forma nativa…

Exemplo GO

Conclusão:

PHP ainda é minha grande paixão e não pretendo deixá-lo na mão. GO tem se mostrado bem interessante, espero que minhas anotações tenham ajudado você a entender pelo menos o básico do básico de GO. Lembrando que o foco aqui é mostrar uma nova ferramenta e não diminuir uma nem outra! No mundo da programação é necessário usar a ferramenta certa para cada problema.

Referências:

Imagens Gopher Artwork — https://github.com/ashleymcnamara/gophers

Exemplos de códigos — https://golang.org/

--

--