dtcwehta624485 2019-03-08 03:30
浏览 1
已采纳

该方法是否应该与接口的签名显式地收缩?

I am new with the golang, I am not quite understand why the below demo program could be executed successfully,

type fake interface {
    getAge(valueInt int,  valStr string) (age int, name string, err error)
}

type Foo struct {
    name string
}

func (b *Foo) getAge(valueInt int, valStr string) (age int, retErr error) {
    age = valueInt
    return age, nil
}
func main() {
    inst := &Foo{name:"foo"}
    value, _ := inst.getAge(2, "foo")
    fmt.Println(value)
}

The interface wants to return three value, but the method getAge only return two, but it still works. How to understand this behavior in golang?

Thanks!

  • 写回答

1条回答 默认 最新

  • douhuang3740 2019-03-08 03:53
    关注

    Foo doesn't implement fake. This is apparent if you extend your code sample a bit (try it on the Go playground):

    package main
    
    import "fmt"
    
    type fake interface {
        getAge(valueInt int, valStr string) (age int, name string, err error)
    }
    
    type Foo struct {
        name string
    }
    
    func (b *Foo) getAge(valueInt int, valStr string) (age int, retErr error) {
        age = valueInt
        return age, nil
    }
    
    
    func bar(f fake) {
      _, name, _ := f.getAge(10, "")
    }
    
    func main() {
        inst := &Foo{name: "foo"}
        value, _ := inst.getAge(2, "foo")
        fmt.Println(value)
    
        bar(inst)
    }
    

    This produces a compile error that's pretty descriptive:

    prog.go:28:5: cannot use inst (type *Foo) as type fake in argument to bar:
        *Foo does not implement fake (wrong type for getAge method)
            have getAge(int, string) (int, error)
            want getAge(int, string) (int, string, error)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题