golang interface{}类型转换的实现示例

 更新时间:2024年10月15日 10:39:07   作者:快刀一哥  
在Go语言中,类型转换可以通过断言、显式、隐式和强制四种方式实现,针对interface{}类型转换为float32或float64,需要使用type断言或reflect包处理,感兴趣的可以了解一下

Golang中存在4种类型转换,分别是:断言、显式、隐式、强制。下面我将一一介绍每种转换使用场景和方法

遇到interface{}类型转换成float32 或者 float64类型进行存储,go中对变量类型转换有比较严格要求。

type断言

type断言配合switch 对每种类型的变量进行转换

func TpyeTransfer(value interface{}) (typ int, val interface{}) {

	switch value.(type) {

	case int:
		return 6, float32(value.(int))
	case bool:
		return 3, value.(bool)
	case int8:
		return 6, float32(value.(int8))
	case int16:
		return 6, float32(value.(int16))
	case int32:
		return 6, float32(value.(int32))
	case uint8:
		return 6, float32(value.(uint8))
	case uint16:
		return 6, float32(value.(uint16))
	case uint32:
		return 6, float32(value.(uint32))
	case float32:
		return 6, float32(value.(float32))

	case string:
		fmt.Printf("data type string is %T \n", value)
		return 0, value

	case int64:
		return 10, float64(value.(int64))
	case float64:
		return 10, float64(value.(float64))
	case uint64:
		return 10, float64(value.(uint64))

	default:

		fmt.Printf("data type is:%T \n", value)
		return 0, value

	}

这样转换有两个问题
1.对切片无法判断,切片有多个变量数值需要逐个处理
2.不能对多个类型的变量进行统一转换

reflect.TypeOf

利用reflect包进行处理,reflect包不能识别time.Time等其他包引入的结构体变量,需要和type断言组合使用

func typereflect(value interface{}) (typ int, val interface{}) {
	res := reflect.ValueOf(value)

	switch res.Kind() {
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32:
		return 6, float32(res.Int())
	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32:
		return 6, float32(res.Uint())
	case reflect.Float32:
		return 6, float32(res.Float())
	case reflect.Int64:
		return 10, float64(res.Int())
	case reflect.Uint64:
		return 10, float64(res.Uint())
	case reflect.Float64:
		return 10, res.Float()

	case reflect.Bool:

		return 3, res.Bool()
	default:
		fmt.Printf("ohter type is:%T \n", value)
		switch value.(type) {
		case time.Time:
			time := value.(time.Time)
			fmt.Println("time is ", time.Unix())
		}
		return 0, val

	}

}

如上两种方法感觉都不完美,在go中还没有赵傲比较完美的处理interface{}变量的方法,有了解更多处理方法的大神一起交流一下

到此这篇关于golang interface{}类型转换的实现示例的文章就介绍到这了,更多相关golang interface{}类型转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux下通过go语言获得系统进程cpu使用情况的方法

    linux下通过go语言获得系统进程cpu使用情况的方法

    这篇文章主要介绍了linux下通过go语言获得系统进程cpu使用情况的方法,实例分析了Go语言使用linux的系统命令ps来分析cpu使用情况的技巧,需要的朋友可以参考下
    2015-03-03
  • Go语言中append函数用法分析

    Go语言中append函数用法分析

    这篇文章主要介绍了Go语言中append函数用法,对比使用append函数与不使用append函数的两个实例,详细分析了Go语言中append函数的功能,需要的朋友可以参考下
    2015-02-02
  • 关于Gin框架中的Cookie和Session的使用方法

    关于Gin框架中的Cookie和Session的使用方法

    为了实现跨请求的数据共享,我们可以使用Cookie和Session,本文将结合实际案例,详细介绍在Go语言的Gin框架中如何使用Cookie和Session,并通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 深入理解gorm如何和数据库建立连接

    深入理解gorm如何和数据库建立连接

    这篇文章主要为大家详细介绍了gorm如何和数据库建立连接,文中的示例代码讲解详细,对我们深入了解GO语言有一定的帮助,需要的小伙伴可以参考下
    2023-11-11
  • golang gorm中格式化时间问题详解

    golang gorm中格式化时间问题详解

    这篇文章主要给大家介绍了关于golang gorm中格式化时间问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用golang具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 详解Go开发Struct转换成map两种方式比较

    详解Go开发Struct转换成map两种方式比较

    本篇文章主要介绍了详解Go开发Struct转换成map两种方式比较,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • go协程池实现原理小结

    go协程池实现原理小结

    本文主要介绍了go协程池实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Golang易错知识点汇总

    Golang易错知识点汇总

    这篇文章汇总了在开发和刷面试题过程中遇到的Golang容易搞错的知识点,关键部分也都为大家写了代码示例,感兴趣的小伙伴可以了解一下
    2022-09-09
  • GoLand 2020.3 正式发布有不少新功能(支持泛型)

    GoLand 2020.3 正式发布有不少新功能(支持泛型)

    这是 2020 年第 3 个版本,也是最后一个版本,你还将发现许多新的代码编辑功能,具体内容详情跟随小编看看有哪些新特性
    2020-12-12
  • golang中接口对象的转型两种方式

    golang中接口对象的转型两种方式

    这篇文章主要介绍了golang中接口对象的转型方式,大家都知道接口对象的转型有两种方式,文中通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-10-10

最新评论