本文摘自php中文网,作者爱喝马黛茶的安东尼,侵删。
Go语言里面有一个语法,可以直接判断是否是该类型的变量: value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型。
如果element里面确实存储了T类型的数值,那么ok返回true,否则返回false。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package main
import (
"fmt"
)
type Order struct {
ordId int
customerId int
callback func()
}
func main() {
var i interface {}
i = Order{
ordId: 456,
customerId: 56,
}
value, ok := i.(Order)
if !ok {
fmt.Println( "It's not ok for type Order" )
return
}
fmt.Println( "The value is " , value)
}
|
输出:
1 | The value is {456 56 <nil>}
|
常见的还有用switch来断言:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package main
import (
"fmt"
)
type Order struct {
ordId int
customerId int
callback func()
}
func main() {
var i interface {}
i = Order{
ordId: 456,
customerId: 56,
}
switch value := i.(type) {
case int:
fmt.Printf( "It is an int and its value is %d\n" , value)
case string:
fmt.Printf( "It is a string and its value is %s\n" , value)
case Order:
fmt.Printf( "It is a Order and its value is %v\n" , value)
default :
fmt.Println( "It is of a different type" )
}
}
|
输出:
1 | It is a Order and its value is {456 56 <nil>}
|
golang的语言中提供了断言的功能。golang中的所有程序都实现了interface{}的接口,这意味着,所有的类型如string,int,int64甚至是自定义的struct类型都就此拥有了interface{}的接口,这种做法和java中的Object类型比较类似。那么在一个数据通过func funcName(interface{})的方式传进来的时候,也就意味着这个参数被自动的转为interface{}的类型。
阅读剩余部分
相关阅读 >>
golang语言可以做些什么
go和golang之间有区别吗?
一周 go world 新鲜事
手撸golang etcd raft协议之10
golang 协程占多大内存
golang如何连接ldap
golang依赖注入工具wire指南
手撸golang 结构型设计模式 装饰器模式
golang编译为什么快
介绍基于go语言框架gin开发的mvc轮子框架:ginlaravel
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang 断言是什么