Я использую fmt.Sscan
для преобразования строки в любой тип, вот что я делаю:
package main
import (
"fmt"
"reflect"
)
func test() interface{} {
return 0
}
func main() {
a := test() // this could be any type
v := "10" // this could be anything
fmt.Println(reflect.TypeOf(a), reflect.TypeOf(&a))
_, err := fmt.Sscan(v, &a)
fmt.Println(err)
}
Этот код не работает, потому что Sscan
не принимает интерфейсы в качествевторое значение: can't scan type: *interface {}
. demo
Что мне показалось наиболее странным, так это то, что первая печать печатает: int *interface {}
, это int или интерфейс?
Как я могу утверждать a
на правильный тип (это может быть любой примитив)?Есть ли решение, которое не включает в себя гигантский оператор switch?
Спасибо.