Article image
Sebastião Almeida
Sebastião Almeida12/05/2022 11:29
Compartilhe

Go é uma linguagem estranha?

  • #GoLang

Ao nos depararmos com a linguagem de programação Go pela primeira vez, ela nos parece uma linguagem muito diferente das demais, muitos lhe dão o adjetivo de "um pouco estranha", até mesmo alguns desenvolvedores experientes ficam meio confusos quando observam a sintaxe e a estrutura de código de um programa em Go pela primeira vez, especialmente pela forma como essa linguagem lida com o paradigma de orientação a objetos.

As linguagens orientadas a objetos mais populares trabalham baseadas em classes e objetos, já Go não possuí classes, mas possuí em seu lugar um tipo de dado chamado struct para realizar o armazenamento de estados (para realizar um papel semelhante aos atributos) e funções que atuam sobre esses tipos struct (para realizar um papel semelhante aos métodos).

Para nosso exemplo vou utilizar como modelo uma entidade denominada Criatura:

Segue seu diagrama UML:

image

A entidade acima seria implementada em Go da seguinte maneira:

package main
import "fmt"
type Criatura struct {
  Nome  string
  Idade int
}
func (this *Criatura) Descricao() {
  fmt.Printf("Nome: %s, Idade: %d", this.nome, this.idade)
}

No exemplo acima criamos uma estrutura de dados de nome 'Criatura' e uma função para atuar sobre essa estrutura, vamos chamar essa função de ‘Descricao’ conforme nosso diagrama UML.

Nesse momento muitos podem estar pensando: usar structs para modelar classes em OO não parece estranho?

A resposta é não! Go não foi a primeira linguagem a utilizar structs para modelar OO, além disso a própria definição de objeto segundo a Wikipedia diz:

“Objeto em ciência da computação, é uma referência a um local da memória que possui um valor. Um objeto pode ser uma variável, função, ou estrutura de dados.”

Podemos definir objetos como uma estrutura de dados que possuí estados (variáveis) e comportamentos (funções) e é exatamente isso que vemos em Golang.

C/C++ e Go

Como dito anteriormente, Go não é a primeira linguagem a utilizar structs para inserir a modelagem orientada a objetos em sua sintaxe. C e C++ também permitem utilizar structs para modelar, mesmo que não integralmente, a orientação a objetos.

Em C++ podemos declarar funções dentro de structs, fazendo a struct ter o papel de uma classe e sua implemetações se comportarem como objetos.

Veja uma implementação de nosso diagrama uml escrito em C++:

struct Criatura { 
 string nome;
 int idade; 
 void descricao(); 
 
};

void Criatura::descricao() {
  cout << "Nome:" << nome << " " << "idade:" << idade;
}

Por default todas os membros dessa struct tem visibilidade pública, mas podemos atribuir restrições de visibilidade da mesma forma que nas classes

Veja o código:

struct Criatura { 
private:
int idade;
public:
string nome;
void descricao(); 
};

Agora qualquer acesso ao campo idade fora da função membro 'descricao' será impedido.

C++ também oferece uma palavra reservada denominada 'class' para a declaração de classes. A diferença é que em uma classe definida com class, o acesso aos campos é privado por default.  

Agora vamos ver uma implementação completa do código:

#include 

using namespace std;

struct Criatura { 
 string nome;
 int idade; 
 void descricao(); 
 
};

void Criatura::descricao() {
  cout << "Nome:" << nome << " " << "idade:" << idade;
}

int main()
{
  
  Criatura dragao;
  dragao.idade = 12;
  dragao.nome = "Dragon";
  dragao.descricao();

  return 0;
}



Notou as semelhanças com o Go no momento de declarar a classe como struct, no momento de atribuir uma funçao membro de forma eterna ao corpo da struct, e também na forma como os métodos e atributos são invocados.

Conclusão

O objetivo desse artigo foi familiarizar o leitor com os conceitos da linguagem Go. Vimos as semelhanças da linguagem Go com o C++, fazendo uma comparação dos recursos tidos como "excêntricos" na linguagem em relação aos conceitos de orientação a objetos.

Até a próxima!

Compartilhe
Comentários (2)
Marcos Lisboa
Marcos Lisboa - 27/10/2022 13:34

Sensacional o artigo.

Para quem quiser aprender Go, lá no canal Aprenda Go no youtube tem uma playlist com 185 videos sobre a linguagem Link da playlist

JA

João Anastácio - 17/05/2022 11:20

Go é uma linguagem extremamente interessante e funcional! Estou aprendendo ela após passar pelo Java