Orientação a objetos em Go

Go não é uma linguagem de programação orientada a objetos. No entanto, algumas de suas features fazem com que seja possível trabalhar com algo muito parecido.

Nesse post vou falar sobre como podemos utilizar essas features para ter alguns comportamentos parecidos com orientação a objetos.

Classe

Go não implemente o conceito de classe como podemos encontrar em outras linguagens. Porém, para suprimir essa necessidade, podemos utilizar as structs ou estruturas.

type Foo struct {}

type bar struct {}

Esse tipo de dado composto nos permite criar campos, que podemos pensar como se fossem atributos. Também é possível adicionar métodos as structs.

Métodos

Go nos permite adicionar métodos as nossas structs, o que já cobre boa parte das necessidades.

type Foo struct {
    // campos...
}

func (f Foo) Bar() {}

// ou

func (f *Foo) Bar() {}

No entanto, Go não implementa polimorfismo.

Visibilidade

Em Go, não temos o conceito de visibilidade, onde conseguimos trabalhar os escopos público, protegido e privado. Ao invés disso, temos um conceito chamado de exported, ou exportado.

Nesse conceito, quando criamos um atributo com letra maiúscula, o mesmo será exportado. Se criado com letra minúscula, não será exportado.

Diferente do conceito de privado de outras linguagens, em Go, um atributo não exportado pode ser visto e utilizado em qualquer parte do package que a struct foi criada, ou seja, sua visibilidade não fica limitada a struct.

type A struct {
    Exportado    string
    naoExportado int
}

// não exportado
func bar() {}

func (a A) bar() {}

// exportado
func Bar() {}

func (a A) Bar() {}

Herança

Como dito no primeiro item, Go não implementa o conceito de classe, logo também não implementa o conceito de herança.

MAAASSSSSS… Go implementa um conceito chamado embeding. Esse conceito consiste em adicionar uma struct a outra, sem definir um nome para o campo.

type Foo struct {
  // campos ...
}

type Bar struct {
   Foo
   // outros campos...
}

Dessa forma, conseguimos utilizar todos os campos e métodos da struct Foo quando criarmos um “objeto” do tipo Bar.

Abaixo vou deixar um vídeo do nosso curso gratuito de Go, onde abordamos mais alguns detalhes de herança.

Deixem suas dúvidas nos comentários.

Até a próxima.


Subscreva

Fique por dentro de tudo o que acontece no mundo Go.

Deixe uma resposta