Golang语言断言

golang中的所有程序都实现了interface{}的接口,这意味着,所有的类型如string,int,int64甚至是自定义的struct类型都就此拥有了interface{}的接口,这种做法和java中的Object类型比较类似。那么在一个数据通过func funcName(interface{})的方式传进来的时候,也就意味着这个参数被自动的转为interface{}的类型。如果我们要返回这个interface{}变量,如下代码:
func funcName(a interface{}) string {

     return string(a)

}

就会报错:cannot convert a (type interface{}) to type string: need type assertion 不能直接将interface{}类型转为string,需要断言

func Test(a interface{}) string {

    value, ok := a.(string)

    if !ok {

        fmt.Println("It's not ok for type string",value)

        return

    }

    return value

}



func main(){

    a:="abcd"

    c1:=Test(a)

    b:=123

    c2:=Test(b)

    fmt.Println(c1,c2)

}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一枝花算不算浪漫

一道笔试题来理顺Java中的值传递和引用传递

398110
来自专栏机器学习从入门到成神

javascript数组去重方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

10410
来自专栏屈定‘s Blog

(转)Java--栈与队列

Java中栈与队列相比集合来说不是很常用的数据结构,因此经常被忽略.个人觉得还是有必要掌握下,以备不时之需. Java中实际上提供了java.util.Stac...

69430
来自专栏武培轩的专栏

Leetcode#500. Keyboard Row(键盘行)

给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

19730
来自专栏JavaEdge

"聊胜于无",浅析Java中的原子操作Java的指针Unsafe类i++不是线程安全的1 原子更新基本类型类2 原子更新数组3 AtomicReference(原子更新引用)4 原子更新字段Atomi

67860
来自专栏Fundebug

10个JavaScript常见BUG及修复方法

14450
来自专栏小勇DW3

concrrent类下 BlockingDeque 下 自己实现代码编写

  java6增加了两种容器类型,Deque和BlockingDeque,它们分别对Queue和BlockingQueue进行了扩展。 Deque是一个双端队...

8920
来自专栏鸿的学习笔记

python的装饰器和闭包

因为在编译时,python会认为b是局部变量,这是python的一个设计选择,为了避免变量的污染,想一想。如果某人在函数内部改动了变量,你没有办法看到这个函数,

10610
来自专栏Ryan Miao

oracle表数据类型number对应java中BIgDecimal转int

oracle中id为number类型,在java获取id时用getBigDecimal 相匹配, 如果想转换成int,重写model中的getInt方法: 1 ...

30760
来自专栏魂祭心

原 Promise 实现

30550

扫码关注云+社区

领取腾讯云代金券