Golang:将类型转换为基本类型

前端之家收集整理的这篇文章主要介绍了Golang:将类型转换为基本类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何将自定义类型转换为接口{},然后转换为基本类型(例如uint8)?

我不能使用像uint16(val.(Year))这样的直接转换,因为我可能不知道所有的自定义类型,但是我可以在运行时确定基本类型(uint8,uint32,…)

基于数字,有很多自定义类型(通常用作枚举):

例如:

type Year  uint16
type Day   uint8
type Month uint8

等等…

问题是关于从界面{}到基本类型的类型转换:

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

您可以使用 reflect包完成此操作:
package main

import "fmt"
import "reflect"

type Year uint16

func AsUint16(val interface{}) uint16 {
    ref := reflect.ValueOf(val)
    if ref.Kind() != reflect.Uint16 {
        return 0
    }
    return uint16(ref.Uint())
}

func main() {
    fmt.Println(AsUint16(Year(2015)))
}

根据您的情况,您可能希望返回(uint16,错误),而不是返回空值.

https://play.golang.org/p/sYm1jTCMIf

猜你在找的Go相关文章