iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang中有哪些类型的断言
  • 756
分享到

golang中有哪些类型的断言

2023-06-15 06:06:48 756人浏览 安东尼
摘要

golang中有哪些类型的断言?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。package mainimport ("GitHub

golang中有哪些类型的断言?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

package mainimport ("GitHub.com/yvasiyarov/PHP_session_decoder/php_serialize""fmt""log")func main() {        // 序列化后的字符串str := `a:3:{s:4:"name";s:3:"tom";s:3:"age";s:2:"23";s:7:"friends";a:2:{i:0;a:1:{s:4:"name";s:5:"jerry";}i:1;a:1:{s:4:"name";s:4:"jack";}}}`        // 反序列化        decoder := php_serialize.NewUnSerializer(str)if result, err := decoder.Decode(); err != nil {panic(err)} else {                // 此处进行类型断言decodeData, ok := result.(php_serialize.PhpArray)if !ok {log.Println(err)}                // 断言后,即可获取内容name := decodeData["name"]age := decodeData["age"]fmt.Println(name, age)                // 内层数据仍需再次断言friends, ok := decodeData["friends"].(php_serialize.PhpArray)if !ok {log.Println(err)}                // 断言成功后即可获取内部数据for _,v := range friends {fmt.Printf("type:%T, value:%+v\n", v,v )friend, ok := v.(php_serialize.PhpArray)if !ok {log.Println(err)}friendName := friend["name"]fmt.Println(friendName)}}}

可以粗暴的这么理解:一个变量是什么类型,就进行什么类型的断言,断言后,即可得到结果

怎么判断一个变量的类型?

打印出来呀:fmt.Printf("%T", verb)

%T这个占位符可以显示变量的类型

下面还有个示例:

package mainimport ("github.com/yvasiyarov/php_session_decoder/php_serialize""fmt""log")func main() {// 序列化后的字符串str := `a:3:{s:4:"name";s:3:"tom";s:3:"age";s:2:"23";s:7:"friends";a:2:{i:0;a:1:{s:4:"name";s:5:"jerry";}i:1;a:1:{s:4:"name";s:4:"jack";}}}`// 反序列化decoder := php_serialize.NewUnSerializer(str)result, err := decoder.Decode()if err != nil {panic(err)}// 类型断言t := result.(php_serialize.PhpArray)strVal := php_serialize.PhpValueString(t["name"])fmt.Println(strVal)switch t := result.(type) {default:fmt.Printf("unexpected type %T\n", t)case php_serialize.PhpArray:fmt.Println(t)fmt.Println(t["name"])fmt.Println(t["age"])switch f := t["friends"].(type) {default:fmt.Printf("unexpected type %T\n", t)case php_serialize.PhpArray:fmt.Println(f)fmt.Println(f[0])fmt.Println(f[1])}}}

上面两个demo都可以达到效果,只是写法不同。

后面我又经人介绍,得到了另外一个包,也能达到效果:

package mainimport ("fmt""log""github.com/wulijun/Go-php-serialize/phpserialize")func main() {str := `a:3:{s:4:"name";s:3:"tom";s:3:"age";s:2:"23";s:7:"friends";a:2:{i:0;a:1:{s:4:"name";s:5:"jerry";}i:1;a:1:{s:4:"name";s:4:"jack";}}}`decodedRes, err := phpserialize.Decode(str)if err != nil {panic(err)}//fmt.Printf("%T\n", decodedRes) //type is map[interface{}]interface{}//type assertdecodedData, ok := decodedRes.(map[interface{}]interface{})if !ok {fmt.Printf("unexpected type %T\n", decodedRes)}fmt.Println(decodedData["name"])fmt.Println(decodedData["age"])//fmt.Printf("%T\n", decodedData["friends"]) // type is map[interface{}]interface{}// type assertfriendsRes, ok := decodedData["friends"].(map[interface{}]interface{})if !ok {fmt.Printf("unexpected type %T\n", decodedData["friends"])}for _,v := range friendsRes {//fmt.Printf("type: %T, val: %#v\n", v,v) // type is map[interface{}]interface{}friend, ok := v.(map[interface{}]interface{})if !ok {fmt.Printf("unexpected type %T\n", decodedData["friends"])}//fmt.Printf("type: %T, val: %#v\n", friend,friend) // type is map[interface{}]interface{}fmt.Println(friend["name"])}}

golang的优点

golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以golang的性能优于其他的解释性语言,且可以在golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网GO频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: golang中有哪些类型的断言

本文链接: https://www.lsjlt.com/news/278293.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang中有哪些类型的断言
    golang中有哪些类型的断言?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。package mainimport ("github...
    99+
    2023-06-15
  • golang 类型转换断言
    在 Golang 开发中,类型转换非常常见。类型转换是将一个变量或者一个值从一种类型转换成另外一种类型的过程。类型转换可以跨越不同的基本类型,也可以跨越不同的对象类型。这是非常重要的一项功能,因为不同的类型有不同的用途,有时候需要将一个类型...
    99+
    2023-05-14
  • JavaScript有哪些断点类型
    小编给大家分享一下JavaScript有哪些断点类型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • golang强制类型转换和类型断言
    目录1.强制类型转换2.类型断言1.强制类型转换 golang是强类型语言,但是和c++,Java不太一样的是,go中没有隐式类型转换,go中的类型转换只有:强制类型转换和断言 在j...
    99+
    2024-04-02
  • Golang断言在类型判断和类型转换中的重要性讲解
    Golang断言在类型判断和类型转换中的重要性讲解 一、引言Golang作为一门静态类型的编程语言,其类型系统在编程过程中起到了非常重要的作用。对于数据的类型判断和类型转换,Golang提供了断言(asser...
    99+
    2024-01-29
    类型转换 类型判断 重要性 断言
  • golang的引用类型有哪些
    golang中的引用类型有:1.map,无序的、键值对的集合;2.pointers,计算机内存中变量所在的内存地址;3.slice,数组的抽象;4.channel,指管道,用于实现并行计算方程间通信;5.interface,指接口,一组方法...
    99+
    2024-04-02
  • Golang类型断言的具体使用
    目录一,如何检测和转换接口变量的类型二,类型判断:type-switch一,如何检测和转换接口变量的类型 在Go语言的interface中可以是任何类型,所以Go给出了类型断言来判断...
    99+
    2023-03-08
    Golang 类型断言
  • Golang类型断言如何使用
    这篇文章主要介绍了Golang类型断言如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang类型断言如何使用文章都会有所收获,下面我们一起来看看吧。一,如何检测和转换接口变量的类型在Go语言的int...
    99+
    2023-07-05
  • Golang断言判断值类型的实现方法
    Golang可以通过断言,判断值的类型 s:="hello world" i:=interface{}(s)//将数值转化为interface空接口类型 //需要注意的是,必须是...
    99+
    2024-04-02
  • Golang中怎么进行类型断言操作
    在 Golang 中,可以使用类型断言操作来判断一个接口类型变量是否实现了某个特定接口或者是某个具体类型的变量。 类型断言的语法如下...
    99+
    2024-03-13
    Golang
  • javaScript的语言类型有哪些
    JavaScript是一种动态型的语言,编译器只能在执行时检测到语言错误,而不是在编译期间。同时,JavaScript也是一种解释型的语言,它不需要先将代码编译成可执行的二进制代码,而是在执行过程中逐行解释代码。在JavaScript中,有...
    99+
    2023-05-14
  • Eclipse中断点类型的应用场景有哪些
    调试程序:在代码中设置断点可以帮助开发人员调试程序,可以在断点处查看变量的值、程序的执行流程等信息,帮助定位程序中的问题。 ...
    99+
    2024-04-03
    Eclipse
  • go语言类型有哪些
    go语言类型有布尔类型、整数类型、浮点数类型、字符串类型、数组类型、切片类型、结构体类型、字典类型、函数类型等。详细介绍:1、布尔类型只有两个值,即true和false;2、整数类型包括int8、int16、int32、int64和相应的无...
    99+
    2023-07-31
  • golang中哪些是值类型
    golang中的值类型有:1.int,整形,整数;2.float,浮点型,可容纳包含小数或小数部分的数字;3.bool,布尔型,只有TRUE和FALSE值;4.string,字符串型,内置类型,默认值为"";5.arra...
    99+
    2024-04-02
  • c语言中的小数类型有哪些
    c 语言小数类型有:float:单精度浮点数,精度 7 位,占用 32 位内存。double:双精度浮点数,精度 15 位,占用 64 位内存。选择类型依据精度需求,精度低用 float...
    99+
    2024-04-28
    c语言 隐式转换
  • Go 语言中的容器类型有哪些?
    Go 语言是一门快速、简洁、高效的编程语言,它的发展在不断地推动着软件工程的进步。在 Go 语言中,容器类型是一个非常重要的概念,它们能够帮助我们更好地组织和管理数据。在本文中,我们将讨论 Go 语言中的容器类型,以及它们的特点和用法。 ...
    99+
    2023-07-02
    数据类型 编程算法 容器
  • R语言中的数据类型有哪些
    这篇文章给大家介绍R语言中的数据类型有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。以上数据类型均为原子向量。单引号和双引号不做区分。R语言中TRUE和FALSE 可以简化为T和F多元素向量的生成方式方式 1:使用...
    99+
    2023-06-14
  • go语言有哪些类型
    go语言的类型有布尔型(bool)、整型(int8、byte、int16等)、浮点型(float32、float64)、复数类型(complex64、complex128)、字符串、字符型、错误型、指针、数组、切片、字典、通道、结构体、接口...
    99+
    2023-05-14
    Go go语言 Golang
  • R语言中的因子类型有哪些
    R语言中的因子类型有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、Factor函数#函数factor可以把一个向量编码为一个因子,其一般形式为:#fac...
    99+
    2023-06-14
  • C语言中的运算类型有哪些
    这篇文章主要介绍“C语言中的运算类型有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中的运算类型有哪些”文章能帮助大家解决问题。一、概述C语言中支持下面4种类型的运算运算类型运算符四则运算...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作