golang初学空接口

在go语言中,接口就是方法的集合,接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法

接口类型和其他数据类型不同,接口不可以被实例化·

实现方法

type 接口类型名 interface{
    方法名1( 参数列表1 ) 返回值列表1
    方法名2( 参数列表2 ) 返回值列表2
    …
}

一个不包含任何方法的接口是空接口,我们可以把任何值赋给空接口类型。

var a interface{}

a = "Hello"
a = true
a = 100

接口的值是由一个具体类型具体类型的值两部分组成的。这两部分分别称为接口的动态类型动态值。我们可以通过类型断言来还原实际值

部分参考:Go语言基础之接口 | 李文周的博客 (liwenzhou.com)

var w io.Writer
w = os.Stdout
w = new(bytes.Buffer)
w = nil

第一行声明了一个接口类型的变量w,此时w的类型和值都为nil——接口的零值就是把它的动态类型和值都设置为nil。一个接口值是否为nil取决于它的动态类型,所以现在这是一个nil接口值,可以与nil相比较。

第二行把一个具体类型隐式转换为一个接口类型,这行代码与 w = io.Writer(os.Stdout) 等价。此时,w的动态类型转换为*os.File,而其值则会设置为os.Stdout的副本,即一个指向代表进程的标准输出的os.File类型的指针。执行这行语句后,调用该接口值的方法,会实际调用(*os.File)的方法,如:w.Write等价于(*os.File).Write。第三行语句也同理。

第四行语句会将w的类型和值都设置为nil,把w恢复到它声明时的状态。

接口值可以互相比较,两个接口值的类型和值都是可比较的,且类型和值都相等时才相等。

 类型断言格式

a.(T)

a代表接口

T代表a可能是的类型

该表达式返回两个值,一个是a转化为T类型的值,还有一个是代表类型断言是否成功的布尔值

func main() {
	var a interface{}
	a = "Hello"
	v, ok := a.(string)
	if ok {
		fmt.Println(v)
	} else {
		fmt.Println("失败")
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值