将类型转换为基本类型

亚历克斯·巴尔(Alex Bar):

如何将自定义类型转换interface{}为基本类型(例如uint8)?

我不能用直接铸造的喜欢uint16(val.(Year)),因为我可能不知道所有的自定义类型,但是我能确定的基本类型(uint8uint32,...)在运行时


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

例如:

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

蒂姆·库珀:

您可以使用以下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, error),而不是返回空值。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从String转换为基本类型或标准Java包装器类型

强制转换为基本类型的怪异Java行为

在Golang中将基本类型转换为派生类型

如何将Java对象类型(如Long和Integer)转换为基本类型(如long和int)

为什么将基本类型实例转换为派生类型对象/引用不是类型安全的

TypeConverter无法从某些基本类型转换为相同的基本类型

ABAP中的Helper类可转换为Odata基本类型

将Npgsql文本类型转换为C#类型

无法将System.Double强制转换为System.Object。LINQ to Entities仅支持强制转换EDM基本类型或枚举类型

无法将类型“ x”强制转换为“ y”。LINQ to Entities仅支持强制转换EDM基本类型或枚举类型

Phoenix / Ecto-将ISO字符串转换为utc_datetime基本类型

C#-如何强制转换为基本类型?

重载运算符-无法在分配中将对象转换为基本类型

如何将分配给Object的c#基本类型数组转换为可以迭代的对象?

无法将类型“ Shared.ClientService”强制转换为类型“ Shared.IClientID”。LINQ to Entities仅支持强制转换EDM基本类型或枚举类型

如何将ProjectTo从基本类型转换为仅在运行时已知的类型?

警告:“〜或<<操作的结果表达式尚未转换为其基本类型”-如何解决?

基本haskell:将类型转换为Int

转换为通用基本类型

将jaxb xml消息转换为Apache骆驼(Java)中的基本类型

如何使用泛型方法将List <T>转换为数组t [](对于基本类型)?

QVariant强制转换为基本类型

无法将类型A强制转换为类型B。LINQto Entities仅支持强制转换EDM基本类型或枚举类型

将基本类型转换/转换为派生的泛型类型

JNI:强制转换后将基本类型转换为Jobject或Object类型的SetObjectArrayElement

将基本类型的列表强制转换为IEnumerable <object>

从基本类型转换为非 POD 结构

将 numpy.recarray 转换为 dict 将条目分配给它们的基本类型以传递给 fastAPI

如何减少在 Go 中将基本类型转换为字符串的函数中的代码重复