go新手对于golang接口的一点疑惑

Elu0 · · 3035 次点击
qkb_75_go
琴为心声
== 你的这个问题,我没有实际验证,仅从字面上这么理解,你看是否正确 == 你的代码,其实是 var r io.Reader var w io.Writer tty := os.OpenFile("") r = tty w = r.(io.Writer) 记得这里 http://ilovers.sinaapp.com/doc/golang-specification.html#Assignability 曾经说过: x = T 的赋值可以进行的前提是:T是一个接口类型,而x 实现了接口T; 至于 `w = r.(io.Writer)`,其实是 `w = tty.(io.Writer)` 不是 r,w 的接口类型被转换了, 而是 w 从tty 中获取接口。 不知道我这样理解是否正确, 欢迎讨论哈。
#1
更多评论
**Type assertions** For an expression x of interface type and a type T, the primary expression x.(T) asserts that x is not nil and that the value stored in x is of type T. The notation x.(T) is called a type assertion. 上面的内容摘录自[Golang Specification](https://golang.org/ref/spec#Type_assertions) 执行x.(T)主要是看x所存储的Value,你可以试着对r和w都reflect.ValueOf一下,其实际都是*os.File类型
#2