rock formation

Como utilizar “herança” em interfaces

Embora o Golang não implemente orientação a objetos, de forma superficial, sua estratégia de embedding – que inclusive é muito utilizada nos packages nativos da linguagem – é muito parecida com a famosa herança.

Nesse post, vou mostrar como utilizar essa estratégia para que possamos ter interfaces mais granulares.

Antes de começar, como o objetivo desse post é exemplificar como utilizar embedding em interfaces, não vamos implementar os métodos. Também não vamos mostrar como utilizá-las em assinaturas de funções/métodos. Caso você queria saber mais sobre como utilizar interfaces, recomendo a leitura do post “Trabalhando com Interfaces”.

Sem mais delongas, vamos criar 3 interfaces. Writer, Reader e Closer.

type Writer interface {
	Write(p []byte) (n int, err error)
}

type Reader interface {
	Read(p []byte) (n int, err error)
}

type Closer interface {
	Close() error
}
Leia mais »

Trabalhando com interfaces

Go é uma linguagem de tipagem forte, ou seja, se eu declarar uma variável do tipo int ela só aceitará valores inteiros. Pode parecer óbvio, no entanto em algumas linguagens é totalmente possível iniciar uma variável como int e no meio do código atribuir um valor do tipo float ou as vezes até mesmo string.

Uma outra diferença do Go com outras linguagens é que em Go não temos o conceito de Orientação a Objetos. Contudo, quando precisamos lidar com um grupo de valores mais complexos, temos a possibilidade de criar nossas próprias estruturas de dados, as structs.

Com isso em mente, sempre que declaramos uma função em Go, precisamos setar o tipo de dado esperado em cada um dos parâmetros, onde muitas vezes esses parâmetros esperam uma struct.

Leia mais »