Files
the-way-to-go_ZH_CN/eBook/16.6.md
2019-07-08 19:59:55 -07:00

42 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 16.6 使用指针指向接口类型
查看如下程序:`nexter`是一个接口类型,并且定义了一个`next()`方法读取下一字节。函数`nextFew``nexter`接口作为参数并读取接下来的`num`个字节,并返回一个切片:这是正确做法。但是`nextFew2`使用一个指向`nexter`接口类型的指针作为参数传递给函数:当使用`next()`函数时,系统会给出一个编译错误:**n.next undefined (type *nexter has no
field or method next)** 译者注n.next未定义*nexter类型没有next成员或next方法
例 16.1 pointer_interface.go (不能通过编译):
```go
package main
import (
"fmt"
)
type nexter interface {
next() byte
}
func nextFew1(n nexter, num int) []byte {
var b []byte
for i:=0; i < num; i++ {
b[i] = n.next()
}
return b
}
func nextFew2(n *nexter, num int) []byte {
var b []byte
for i:=0; i < num; i++ {
b[i] = n.next() // 编译错误:n.next未定义*nexter类型没有next成员或next方法
}
return b
}
func main() {
fmt.Println("Hello World!")
}
```
**永远不要使用一个指针指向一个接口类型,因为它已经是一个指针。**
## 链接
- [目录](directory.md)
- 上一节:[不需要将一个指向切片的指针传递给函数](16.5.md)
- 下一节:[使用值类型时误用指针](16.7.md)