Executando verificação de segurança...
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?

Carregando publicação patrocinada...
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