美文网首页
interface{}、类型断言

interface{}、类型断言

作者: Venture_Mark | 来源:发表于2019-01-22 18:39 被阅读0次

在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类型就是 interface{}, 也称为空接口类型
比如我们定义一个函数, 输出字符串, 但参数是 interface{} 类型

func echoString(content interface{}) {
    fmt.Println(content )
}

当我们调用 echoString("输出字符串") 方法, 会报错因为content是interface{}类型, 而不是string类型

接口类型向普通类型的转换称为类型断言(运行期确定)

对于上述调用, 可以通过修改方法echoString

func echoString(content interface{}) {
    result, _ := content.(string)  //通过断言实现类型转换
    fmt.Println(result)
}

这个时候又会有潜在的威胁, 如果我们给该方法传入的是 int 类型, 那么在断言的时候会报错, 这个时候我们需要完善代码

func echoString(content interface{}) {
    result, err := content.(string)  
    if err != nil {  // 断言失败
        fmt.Println(err .Error())  // 输出失败原因
        return
    }
    fmt.Println(result)
}

不同类型变量的运算必须进行显式的类型转换,否者结果可能出错

相关文章

  • interface{}、类型断言

    在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类...

  • interface{}、类型断言

    在 golang 中 interface{} 可用于向函数传递任意类型的变量, 但在函数内部使用的话, 该变量的类...

  • golang interface

    interface 类型断言 interface的变量里面可以存储任意类型类型数据(原理: 任何类型都实现了空接口...

  • 1-类型断言

    类型断言适用对象 类型断言只能用于interface变量。 未实现相应接口的方法的断言,编译会失败 int32没有...

  • go 接口

    空接口 断言 我们知道interface{}可以保存任意类型的数,所以我们要通过断言查询是什么类型断言的对象是空接口

  • go 类型转换

    interface{}、断言与类型转换 这篇文章里面的interface{}转换,转换示例非常清楚 (https:...

  • Golang判断对象是某个结构体的实例

    输出结果如下: 用对象进行断言时,需要先将对象转换成空接口类型: interface{}(e)

  • Golang实践总结(一) -- interface和类型断言、

    上一篇发布的文章应该也算是总结,也是工作中遇到的问题。现在入职新公司半个多月,.net的脑子差不多已经换成了gol...

  • 聊聊golang的类型断言

    序 本文主要研究一下golang的类型断言 类型断言 断言x不为nil且x为T类型 如果T不是接口类型,则该断言x...

  • go基础--interface断言

    一个interface类型的变量varI中可以包含任何类型的值,必须有一种方式来检测它的动态类型,即运行时在变量存...

网友评论

      本文标题:interface{}、类型断言

      本文链接:https://www.haomeiwen.com/subject/tcyrjqtx.html