猿问

将自定义类型类型转换为基本类型

如何将自定义类型转换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)))

}

http://play.golang.org/p/cyAnzQ90At


倚天杖
浏览 177回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答