Bleskovka o ukazatelých na interface

Publikováno 09-30-2016 11:00:50

Dnes si dáme první bleskovou zprávu.

### Nepoužívejte v kódu ukazatel (pointer) na interface.

Důvod.

Jakákoliv struktura, která implementuje interface, jej implementuje jak jako samotná struktura, tak jako ukazatel na strukturu.

Jen si musíte dát pozor na příjemce (receivery). Pokud příjemce předpokládá ukazatel (pointer), tak musíte volat daný příjemce na ukazateli. V následujícím příkladu je vidět, jak příjemce implementuje funkci Funkce na ukazateli a tím pádem je potřeba použít k jeho volání iface1 = &Secti{}. Tedy dereferencovat ukazatel na strukturu Secti.

package main

import "fmt"

type Iface interface {
	Funkce(a, b int) int
}

type Secti struct{}

func (s *Secti) Funkce(a, b int) int {
	return a + b
}

func main() {
	var iface1 Iface
	iface1 = &Secti{}
	Soucet(iface1, 1, 1)
}

func Soucet(iface Iface, a, b int) {
	fmt.Println(iface.Funkce(a, b))
}
comments powered by Disqus