Executando verificação de segurança...
5

Primeiro "Olá, mundo!" com Golang

Isaque Véras de Oliveira
Desenvolvedor backend
https://github.com/isaqueveras

Olá pessoal, esse é o meu primeiro artigo no tabnews e gostaria dos feedbacks de vocês nos comentários!

Neste artigo você aprenderá a escrever suas primeiras linhas de código utilizando a linguagem do Google, o Go. Para escrever o código, iremos utilizar a plataforma go.dev para não precisar instalar o Go na sua máquina.

O que são os packages

Em Go utilizamos os package para nomear uma determinado "pasta" onde chamamos de pacotes ou modulos. O principal package é a main onde contém a função principal que inicializa todo o nosso codigo.

Mão na massa

Na primeira linha, nomearemos o nome do pacote que iremos utilizar, neste caso é o pacote main.

package main

A principal função é a main() que inicializa todo o código. Determinamos uma função utilizando a abreviação da palavra função func. Para escrever no terminal teremos que importar o package fmt para utilizarmos o método Println() que escreve no terminal.

package main

import "fmt"

func main() {
    fmt.Println("Olá, mundo! estou no tabnews.")
}

Se você conseguiu fazer seguindo os passos descrito acima, parabéns! você acaba de escrever seu primeiro "Olá, mundo" nessa linguagem tão performática e amada por muitos e muitas.

Nos próximos artigos irei explicar e ensinar como podemos utilizar ponteiros fácilmente na linguagem Go, deixando sua aplicação muito performática com pouco consumo de memória.

Carregando publicação patrocinada...
3

Excelente introdução e seja muito bem vindo ao TabNews!

Uma pergunta: qual a diferença entre package e import? Pergunto isso, pois em Node.js ou JavaScript, você somente importa "módulos" ou "pacotes", acaba sendo tudo a mesma coisa, incluindo importar um JSON que acaba virando um objeto.

E junto disso, de onde ele soube importar o fmt? Do main?

4

Olá Filipe! obrigado por comentar e pelas perguntas.

O pacote fmt é padrão da linguagem, é como fazer o require("path") com node.

A diferencia entre o package e import é que todo arquivo Go precisa informar na primeira linha qual o nome do pacote que esse codigo pertence. O import é exatamente o que o require do js faz, importa pacotes (libs).

Por exemplo: eu crio uma pasta chamada ola e dentro um arquivo ola.go. O package serve exatamente pra nomear esse pacote. No arquivo ola.go na primeira linha eu informa qual o nome do pacote desse arquivo.

package ola

import "fmt"

func Mundo() {
    fmt.Println("Olá, mundo!")
}

No arquivo main.go eu consigo importar esse pacote utilizando o import

package main

import "nome-do-modulo/ola"

func main() {
    ola.Mundo()
}

Obs: pra criar um pacote e utilizar é preciso inicializar o modulo no projeto assim:

go mod init nome-do-modulo
2

Olá @isaqueveras, muito legal essa explicação.

Assim como o Filipe Deschamps, fiquei em dúvida a respeito do package e do import.

Apenas fazendo referência ao C# e o PHP, o package funcionaria de modo similar aos namespaces correto?

6

Olá OtavioVB, tudo bem?

Complementando ao isaqueveras, um package em Golang é usado para indicar onde as funcionalidades similares estão. É como se fosse uma biblioteca e em todos os livros estivessem escrito o nome da biblioteca ao qual estes livros fazem parte.

Por exemplo: Estou na biblioteca X e meu livro Go Horse tem em seu prefácio escrito que faz parte da biblioteca X.

A diferença entre Golang, C#, PHP e Java é que Golang unifica nos packages funcionalidades que não são classes (já que em Go não tem classes, mas algo próximo a isso como structs), ou seja, são métodos, funções que se fazem parte do contexto que o pacote se propõe a resolver.

Como descrito na referência em GeekForGeeks:

  • Os packages são a parte mais poderosa da linguagem Go.
  • A finalidade de um package é projetar e manter um grande número de programas agrupando recursos relacionados em unidades únicas para que possam ser fáceis de manter e entender e independentes dos outros programas de pacote.
  • Essa modularidade permite que eles compartilhem e reutilizem.
  • Na linguagem Go, cada pacote é definido com um nome diferente e esse nome está próximo de sua funcionalidade como pacote “strings” e contém métodos e funções que se relacionam apenas com strings.

Para entender um pouco melhor, trago também exemplo de packages em Java conforme a W3Schools:

  • Um package em java é usado para agrupar classes relacionadas.
  • Pense nisso como uma pasta em um diretório de arquivos.
  • Nós usamos packages para:
    • Evitar conflitos com nomes
    • Para escrever um código de melhor manutenção
  • Packages são dividos em duas categorias:
    • Built-in Packages (packages do Java API)
    • User-defined Packages (Seus próprios packages customizados)

E sobre namespaces, de acordo com a Microsoft:

O .NET usa namespaces para organizar suas muitas classes...

A Microsoft também traz uma visão geral sobre os namespaces:

  • Eles organizam projetos de códigos grandes.
  • Eles são delimitados usando o . operador.
  • A diretiva using elimina a necessidade de especificar o nome do namespace para cada classe.
  • O namespace global é o namespace "raiz": global::System sempre fará referência ao namespace do .NET System.

Referências:

1

Victor, muito bom complemento! Então no caso do Go, os packages são Singletons? Eles guardam estado? Ou não guardan de jeito algum? Eles podem ser usados com o pattern de Factory?

Estou super curioso com isso, pois está parecendo muito como foram implementados os Models aqui no TabNews. Todos são Singletons pela natureza do Node.js tratar eles assim por padrão, mas nenhum guarda estado, são somente um agrupamento de funções.

2