V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
SlipStupig

让人迷惑的 interface

  •  
  •   SlipStupig · Apr 29, 2020 · 2624 views
    This topic created in 2201 days ago, the information mentioned may be changed or developed.

    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呢?

    Supplement 1  ·  Apr 30, 2020

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

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

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

    5 replies    2020-04-30 08:12:59 +08:00
    AngryPanda
        1
    AngryPanda  
       Apr 29, 2020 via Android
    这个例子,不是为了演示继承。
    Hanggi
        2
    Hanggi  
       Apr 29, 2020
    Duck typing 了解下
    djoiwhud
        3
    djoiwhud  
       Apr 29, 2020 via Android
    golang 的 interface 与 java 的作用非常类似。本质上是为了实现多态特性而存在的。还和 cpp 的虚函数是一样的目标。此例子并没有显示出 go 的接口的用途。
    lhx2008
        4
    lhx2008  
       Apr 29, 2020
    这个是接口来做多态,但是一般用在函数参数或者成员变量里面, 不会有人真的在 main 里面 var 一个接口。
    Go 的嵌套也算不上是完整的继承,只是把组合的成员变量和函数换了个变量空间释放了
    janxin
        5
    janxin  
       Apr 30, 2020
    python 有 duck typing 的吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3142 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 03:17 · PVG 11:17 · LAX 20:17 · JFK 23:17
    ♥ Do have faith in what you're doing.