Skip to Main Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate content levelBeginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

7.5 接口值

从概念上来讲,一个接口类型的值(简称接口值)其实有两个部分:一个具体类型和该类型的一个值。二者称为接口的动态类型和动态值。

对于像Go这样的静态类型语言,类型仅仅是一个编译时的概念,所以类型不是一个值。在我们的概念模型中,用类型描述符来提供每个类型的具体信息,比如它的名字和方法。对于一个接口值,类型部分就用对应的类型描述符来表述。

如下四个语句中,变量w有三个不同的值(最初和最后是同一个值):

接下来让我们详细地查看一下在每个语句之后w的值和相关的动态行为。第一个语句声明了w:

在Go语言中,变量总是初始化为一个特定的值,接口也不例外。接口的零值就是把它的动态类型和值都设置为nil,如图7-1所示。

一个接口值是否是nil取决于它的动态类型,所以现在这是一个nil接口值。可以用w==nil或者w!=nil来检测一个接口值是否是nil。调用一个nil接口的任何方法都会导致崩溃:

第二个语句把一个*os.File类型的值赋给了w:

这次赋值把一个具体类型隐式转换为一个接口类型,它与对应的显式转换io.Writer(os.Stdout)等价。不管这种类型的转换是隐式的还是显式的,它都可以转换操作数的类型和值。接口值的动态类型会设置为指针类型*os.File的类型描述符,它的动态值会设置为os.Stdout的副本,即一个指向代表进程的标准输出的os.File类型的指针,如图7-2所示。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go语言编程

Go语言编程

威廉·肯尼迪

Publisher Resources

ISBN: 9787111558422