V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
SlipStupig
V2EX  ›  Go 编程语言

让人迷惑的 interface

  •  
  •   SlipStupig · 2020-04-29 22:11:03 +08:00 · 2271 次点击
    这是一个创建于 1670 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 里面有用interface定义接口的,而这个接口似乎并不是其它语言所定义的接口比如:Java python 一个个含义,我在网上看了一个示例代码:

    package main
    
    import (
    	"fmt"
    )
    
    type Phone interface {
    	call()
    }
    
    type NokiaPhone struct {
    }
    
    func (nokiaPhone NokiaPhone) call() {
    	fmt.Println("I am Nokia, I can call you!")
    }
    
    type IPhone struct {
    }
    
    func (iPhone IPhone) call() {
    	fmt.Println("I am iPhone, I can call you!")
    }
    
    func main() {
    	var phone Phone
    
    	phone = new(NokiaPhone)
    	phone.call()
    
    	phone = new(IPhone)
    	phone.call()
    
    }
    

    为什么能用struct完成组合继承,还需要用interface呢?

    第 1 条附言  ·  2020-04-30 22:20:50 +08:00

    理解了接口了,跟其他语言类型是一样的,只是golang并不是继承,而是return一个接口,如果想实现抽象接口,可以使用

    func newMethod(){
     panic("Not implemented")
    }
    

    然后使用一个新的结构体就行

    5 条回复    2020-04-30 08:12:59 +08:00
    AngryPanda
        1
    AngryPanda  
       2020-04-29 22:13:57 +08:00 via Android
    这个例子,不是为了演示继承。
    Hanggi
        2
    Hanggi  
       2020-04-29 22:16:52 +08:00
    Duck typing 了解下
    djoiwhud
        3
    djoiwhud  
       2020-04-29 22:18:21 +08:00 via Android
    golang 的 interface 与 java 的作用非常类似。本质上是为了实现多态特性而存在的。还和 cpp 的虚函数是一样的目标。此例子并没有显示出 go 的接口的用途。
    lhx2008
        4
    lhx2008  
       2020-04-29 22:19:28 +08:00
    这个是接口来做多态,但是一般用在函数参数或者成员变量里面, 不会有人真的在 main 里面 var 一个接口。
    Go 的嵌套也算不上是完整的继承,只是把组合的成员变量和函数换了个变量空间释放了
    janxin
        5
    janxin  
       2020-04-30 08:12:59 +08:00
    python 有 duck typing 的吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2841 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:38 · PVG 08:38 · LAX 16:38 · JFK 19:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.