调用接口函数时出错?

时间:2015-02-15 19:54:55

标签: go

package main

import "io"

type MyClass struct{
    writer  *io.Writer
}

func (this *MyClass) WriteIt() {
    this.writer.Write([]byte("Hello World!"))
}

为什么当writerio.Writer的实现尝试调用Write()函数时}显示此错误

  

this.writer.Write undefined(type * io.Writer没有字段或方法   写)

2 个答案:

答案 0 :(得分:5)

正如makhov所说,这是因为writer的结构定义中的MyClass是指向实现Writer接口的东西的指针,而不是实现编写器接口本身的东西。因此,您的代码应该是:

package main

import "io"

type MyClass struct{
    writer  io.Writer
}

func (this *MyClass) WriteIt() {
    this.writer.Write([]byte("Hello World!"))
}

package main

import "io"

type MyClass struct{
    writer  *io.Writer
}

func (this *MyClass) WriteIt() {
    (*(this.writer)).Write([]byte("Hello World!"))
}

通常,做第一个选项会有意义(并且更加惯用)。

答案 1 :(得分:2)

使用不writer io.Writer

*