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{}类型转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang获取本地IP地址方法分享

    Golang获取本地IP地址方法分享

    这篇文章主要给大家介绍了Golang 获取本地 IP 地址方法,文中有详细的代码示例,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • golang json.Marshal 特殊html字符被转义的解决方法

    golang json.Marshal 特殊html字符被转义的解决方法

    今天小编就为大家分享一篇golang json.Marshal 特殊html字符被转义的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • go语言开发环境安装及第一个go程序(推荐)

    go语言开发环境安装及第一个go程序(推荐)

    这篇文章主要介绍了go语言开发环境安装及第一个go程序,这篇通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Go语言实现将中文转化为拼音功能

    Go语言实现将中文转化为拼音功能

    这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-01-01
  • 聊聊go xorm生成mysql的结构体问题

    聊聊go xorm生成mysql的结构体问题

    这篇文章主要介绍了go xorm生成mysql的结构体问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-03-03
  • Goland的设置与配置全过程

    Goland的设置与配置全过程

    这篇文章主要介绍了Goland的设置与配置全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • GO语言并发编程之互斥锁、读写锁详解

    GO语言并发编程之互斥锁、读写锁详解

    这篇文章主要介绍了GO语言并发编程之互斥锁、读写锁详解,本文是GO并发编程实战一书的样章,详细讲解了互斥锁、读写锁,然后给出了一个完整示例,需要的朋友可以参考下
    2014-11-11
  • go中make用法及常见的一些坑

    go中make用法及常见的一些坑

    golang分配内存主要有内置函数new和make,下面这篇文章主要给大家介绍了关于go中make用法及常见的一些坑,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Go语言文件读写操作案例详解

    Go语言文件读写操作案例详解

    这篇文章主要为大家介绍了Go语言文件读写操作案例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Golang常用的几种密码加密方式分享

    Golang常用的几种密码加密方式分享

    这篇文章给大家介绍了Golang常用的几种密码加密方式,加密有两种方式,一种是直接加密,一种是盐值加密,直接加密指的是将原始密码直接进行加密,盐值加密则是在进行密码加密之前,文中有详细的代码示例,需要的朋友可以参考下
    2023-08-08

最新评论