Можно ли провести различие между []interface{}
и interface{}
в случае коммутатора?
Попытка создать функцию декодирования, в которой вы можете передавать различные типы, а затемрегистр переключателя определяет тип, а затем приступает к декодированию этого конкретного типа.Хотя у меня возникают проблемы, когда переданный тип является []interface{}
.
Я экспериментировал с пакетом reflect
, но пока не повезло.См. Фрагмент кода и ссылку на игровую площадку ниже.
package main
import (
"fmt"
"math/big"
)
type Test struct {
t interface{}
}
func main() {
testVar1 := big.NewInt(0)
testVar2 := int64(1)
testVar3 := []byte("test")
testVar4 := true
testVar5 := []int{1, 2, 3, 4}
var testVar6 Test
Issue(testVar1)
Issue(testVar2)
Issue(testVar3)
Issue(testVar4)
Issue(testVar5)
Issue(testVar6)
}
func Issue(t interface{}) {
switch t.(type) {
case *big.Int:
fmt.Println("*big.Int")
case int8, int16, int32, int64:
fmt.Println("int8, int16, int32, int64")
case []byte:
fmt.Println("[]byte")
case bool:
fmt.Println("bool")
case []interface{}:
fmt.Println("how to get testVar5 to print here")
fmt.Println("[]interface{}")
case interface{}:
fmt.Println("interface{}")
default:
fmt.Println("unsupported type")
}
}
Результаты:
*big.Int
int8, int16, int32, int64
[]byte
bool
interface{}
interface{}
Есть ли способ получить testVar5
, чтобы попасть в дело []interface{}
?
https://play.golang.org/p/U0dJF9CEbTX