golang接口的demo02

package main

import "fmt"

type st01 struct {
	int
}

func (s st01) p(str string) string {
	fmt.Println(str)
	return str
}
func (s st01) i(i int) int {
	fmt.Println(i)
	return i
}
func main() {
	type if01 interface {
		p(s string) string
	}
	var st01 = interface{}(st01{})
	//这里是具体的类型转成了空接口,任何对象都实现了空接口,这个是合法的,此时st01的类型是interface{},但是他的值是st01结构,具有一定的方法,可以断言为具体的接口类型,只有断言成具体的了接口类型才可以使用对对应类型的方法,因为当前类型interface{}空接口不具有p方法
	if st02, ok := st01.(if01); ok { //定义个有p方法的接口,然后如果断言成功,说明st01拥有p方法,可以安全的使用

		st02.p("可以安全的使用st01的p方法~")
	}
}

type if02 interface {
	p(s string) string
	i(i int) int
}
type if03 interface {
	p(s string) string
	i(i int) int
	b(i bool) bool
}

可以根据x断言的类型,判断x满足的接口,类调用不同类型的方法

package fmt

func formatOneValue(x interface{}) string {
	if err, ok := x.(error); ok {
		return err.Error()
	}
	if str, ok := x.(Stringer); ok {
		return str.String()
	}
	//	...all	other	types...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值