Inicialmente comecei a fazer testes com Go por pura diversão. Conheci a linguagem pelo
Grok Podcast, e gostei bastante do que falaram. Inclusive essa é uma recomendação forte que eu faço para quem quer começar com Go, escutem os três podcasts sobre Go que os caras do Grok fizeram, eu ouvi a serie toda umas três vezes :)
Vou escrever o post para solidificar a dimensão do básico na minha cabeça.
Entender o básico de qualquer linguagem, framework, whatever na minha opinião é fundamental para que eu consiga me desenvolver no que estou tentando aprender.
Definir o básico já não é tão fácil.
Geralmente fico dias batendo em cima da documentação até perceber que alguns elementos estão sempre presentes. Só depois de adquirir essa percepção consigo começar a sacar o que é básico e essencial para que eu consiga, por exemplo, ler a documentação e produzir código sozinho.
Isso vai gerar uma série de posts, nesse vou me ater apenas a alguns aspectos como tipagem, interfaces públicas e structs.
Tipagem
Go é fortemente tipado, mas tem
ducktype. Na minha opinião isso gera um pouco de confusão pois o ducktype só está disponível, digamos assim (disponível), na declaração de variáveis. Ou seja, métodos, "atributos" (entre aspas, ver structs), variáveis globais não tem ducktype.
Vou exemplificar com a diferença entra uma declaração de uma variável global e uma local. Essa diferença se reflete na possibilidade da variável local permitir que o valor seja recebido utilizando o atalho ":=" vou exemplificar com algumas declarações diferentes.
No código acima declaramos uma constante
WALTER fora da função main e declaramos uma variável
longo dentro da função main, ambas são strings, mas a variável
longo declaramos utilizando a forma curta
:=. Já a constante precisamos declarar da forma convencional utilizando a paravra chave
var seguindo pelo nome do elemento e o tipo, nessa ordem.
Getters
Elementos em letra maiúscula são públicos.
Quando digo
elementos estou me referindo a métodos e variáveis.
Eu particularmente gosto desse padrão, deixa claro o que é publico do que não é no código.
No site do Go tem um
exemplo de "hello", que usa um método publico que começa com letra maiúscula (Println).
Structs
A definição de objeto do Go não tem a pegada tradicional que estamos acostumados com outras linguagens como PHP, Ruby ou Java.
O recurso de linguagem disponível para tal é o
strutct.
Struct é um
tipo com campos definidos.
No código acima estamos definindo um struct Pessoa e dentro da função main estamos instanciando esse struct já atribuido valor aos atributos (exemplo p). Existem outras formas de se instanciar um struct, poderíamos ter utilizado a função
new (exemplo p2). Para mais detalhes e exemplos mais ricos consulte a sessão
Effective Go - Data
Conclusão
Go é uma linguagem fascinante e merece muita atenção. Eu estou no começo dessa jornada ainda, acredito que ao longos dos posts amadureça muita coisa e talvez até de uma editada nesse post, mas por enquanto isso é tudo que tenho a dizer sobre esses três aspectos.
Pretendo falar na série
Go Away sobre o esquema de múltiplos retornos, nomear parâmetros de retorno, erros (Panic, Recover, Defer), concorrência, interfaces, padrões, muita coisa! Recomendo para quem esteja começando que leia sobre a sintaxe, pratique com pequenos exemplos, e leia os exemplos feitos pela comunidade. Em falar de exemplos, esse site contem muitos bons
Go By Example.
Só lembrando que minha única fonte de estudo foi a
documentação oficial. Em especial
Effective Go, dúvidas sobre padrões de nome, declaração de structs, como alocar dados, muita coisa sobre a forma Go de programar.
Para detalhes mais profundos sobre a linguagem consultei o
Go Programming Language Specification.
Nos vemos no próximo!
Cheers!