gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:03:33 26 4
gpt4 key购买 nike

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

最佳答案

您可以使用 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

关于go - 将自定义类型类型转换为基本类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30718602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com