分享
断言
sirius_ztz · · 2571 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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)
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2571 次点击 ∙ 1 赞
下一篇:golang
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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)
}