Erro difícil com interfaces e switch case em Go

Um erro difícil de depurar usando interfaces e switch case em Golang

Este é um erro bem difícil de achar, basicamente a ordem dos cases do switch esta errada, o maior escopo esta em primeiro lugar fazendo com que o switch sempre pare nele, para resolver o problema basta mudar a ordem dos cases colocando os casos de menor escopo no início. Mas até ai já foi um tempão debugando código e litros de café :D

package main

import "fmt"

type comptometer interface {
	Sum(a, b int) int
}

type foo struct{}

func (_ foo) Sum(a, b int) int {
	return a + b
}

type bar struct{}

func (_ bar) Sum(a, b int) int {
	return a + b
}

//
func printType(e comptometer) {
	/*
		Este switch esta na ordem errada
		e vai imprimir sempre "comptometer
		interface" e nunca via entrar nos
		outros cases do switch. Mova o case
		comptometer para o fim do switch
		para resolver o bug.
	*/
	switch e.(type) {
	case comptometer:
		fmt.Println("comptometer interface")
	case *foo:
		fmt.Println("ponteiro para foo")
	case *bar:
		fmt.Println("ponteiro para bar")
	}
}

func main() {
	var f = &foo{}
	printType(f)
	var b = &bar{}
	printType(b)
}

Códing fonte: https://github.com/go-br/estudos/tree/master/interface/erro_com_switch

Cesar Gimenes


Compartilhe esse post:

 
comments powered by Disqus