📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

接口值

创建时间2019-08-12最后修改2019-08-12原位置/程序员成长之旅/Go语言学习/笔记/字数266
目录:程序员成长之旅/Go语言学习/笔记

接口值

接口也是值。它们可以像其它值一样传递。

接口值可以用作函数的参数或返回值。

在内部,接口值可以看做包含值和具体类型的 元组 : (value, type)

接口值保存了一个具体底层类型的具体值。

接口值调用方法时会执行其底层类型的同名方法。 package main import ( "fmt" "math" ) type I interface { M() } type T struct { S string } func (t *T) M() { fmt.Println(t.S) } type F float64 func (f F) M() { fmt.Println(f) } func main() { var i I i = &T{"Hello"} describe(i) i.M() i = F(math.Pi) describe(i) i.M() } func describe(i I) { fmt.Printf("(%v, %T)\n", i, i) }

x

1 package

main 2 3 import ( 4

"fmt" 5

"math" 6 ) 7 8 type

I

interface { 9

M () 10 } 11 12 type

T

struct { 13

S

string 14 } 15 16 func ( t

T ) M () { 17

fmt . Println ( t . S ) 18 } 19 20 type

F

float64 21 22 func ( f

F ) M () { 23

fmt . Println ( f ) 24 } 25 26 func

main () { 27

var

i

I 28 29

i

=

& T { "Hello" } 30

describe ( i ) 31

i . M () 32 33

i

=

F ( math . Pi ) 34

describe ( i ) 35

i . M () 36 } 37 38 func

describe ( i

I ) { 39

fmt . Printf ( "(%v, %T)\n" , i , i ) 40 } 41