Não encontrei um bom recurso para usar interface{}
tipos. Por exemplo
package main
import "fmt"
func weirdFunc(i int) interface{} {
if i == 0 {
return "zero"
}
return i
}
func main() {
var i = 5
var w = weirdFunc(5)
// this example works!
if tmp, ok := w.(int); ok {
i += tmp
}
fmt.Println("i =", i)
}
Você conhece uma boa introdução ao uso do Go interface{}
?
questões específicas:
- como obtenho o tipo "real" de w?
- existe alguma maneira de obter a representação de string de um tipo?
- existe alguma maneira de usar a representação de string de um tipo para converter um valor?
types
type-conversion
go
cc jovem
fonte
fonte
reflect.TypeOf
.Você também pode fazer mudanças de tipo:
fonte
Você pode usar reflexão (
reflect.TypeOf()
) para obter o tipo de algo, e o valor que ele fornece (Type
) tem uma representação de string (String
método) que você pode imprimir.fonte
fmt
o formato "% T" em vez de usar diretamentereflect
.Aqui está um exemplo de decodificação de um mapa genérico usando switch e reflexão, então se você não combinar o tipo, use reflexão para descobrir e então adicione o tipo na próxima vez.
fonte
Os interruptores de tipo também podem ser usados com material de reflexão:
fonte
Vou oferecer uma maneira de retornar um booleano com base na passagem de um argumento de um tipo de reflexão para um receptor de tipo local (porque não consegui encontrar nada parecido com isso).
Primeiro, declaramos nosso tipo anônimo de tipo reflect.Value:
Em seguida, adicionamos um construtor para nosso tipo local AnonymousType que pode receber qualquer tipo potencial (como uma interface):
Em seguida, adicionamos uma função para nossa estrutura AnonymousType que atua contra um reflect.Kind:
Isso nos permite chamar o seguinte:
Pode ver uma versão mais longa e funcional aqui: https://play.golang.org/p/EIAp0z62B7
fonte
Existem várias maneiras de obter uma representação de string de um tipo. Os switches também podem ser usados com tipos de usuário:
Link para um playground: https://play.golang.org/p/VDeNDUd9uK6
fonte