Go中类型断言、别名类型、类型定义

Type assertions

x.(T) 断言x不是空值,并且x中存储的值属于T类型。符号x.(T)称为类型断言。 如果T不是接口类型,x.(T)断言x的动态类型与T类型相同。在这种情况下,T必须实现x的(接口)类型;否则,类型断言是无效的,因为x不可能存储T类型的值。如果T是接口类型,则x.(T)断言x的动态类型实现了接口T

如果类型断言成立,则表达式的值就是存储在x中的值,其类型为t。如果类型断言为假,则会发生运行时恐慌。换句话说,即使x的动态类型只在运行时知道,x.(T)的类型在正确的程序中是已知的。

var x interface{} = 7          // x has dynamic type int and value 7
i := x.(int)                   // i has type int and value 7

type I interface { m() }

func f(y I) {
	s := y.(string)        // illegal: string does not implement I (missing method m)
	r := y.(io.Reader)     // r has type io.Reader and the dynamic type of y must implement both I and io.Reader
	…
}

go语言的类型推断能带来哪些好处?

明显提示程序的灵活性,使得代码重构变得更加容易,同时又不会给代码的维护带来额外负担,更不会损失程序的运行效率

 

 

Alias declarations

type (
	nodeList = []*Node  // nodeList and []*Node are identical types
	Polar    = polar    // Polar and polar denote identical types
)

别名类型主要是为了代码重构而存在的

Type definitions

type (
	Point struct{ x, y float64 }  // Point and struct{ x, y float64 } are different types
	polar Point                   // polar and Point denote different types
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值