Как преобразовать пользовательский тип в interface{}
, а затем в базовый тип (например, uint8
)?
Я не могу использовать прямой листинг, например uint16(val.(Year))
, потому что я могу не знать все пользовательские типы, но я могу определять базовые типы (uint8
, uint32
,...) во время выполнения
Существует множество настраиваемых типов (обычно используемых как перечисление) на основе числовых:
Пример:
type Year uint16
type Day uint8
type Month uint8
и т.д.
Вопрос о литье типов от interface{}
к базовым типам:
package main
import "fmt"
type Year uint16
// ....
//Many others custom types based on uint8
func AsUint16(val interface{}) uint16 {
return val.(uint16) //FAIL: cannot convert val (type interface {}) to type uint16: need type assertion
}
func AsUint16_2(val interface{}) uint16 {
return uint16(val) //FAIL: cannot convert val (type interface {}) to type uint16: need type assertion
}
func main() {
fmt.Println(AsUint16_2(Year(2015)))
}