minibear2333 / blog-comment

0 stars 0 forks source link

3 3 接口与多态 | go语言精进之路 #18

Open utterances-bot opened 3 years ago

utterances-bot commented 3 years ago

3 3 接口与多态 | go语言精进之路

3.3 接口与多态 # 今天和大家聊聊 golang 的接口( interface ) 本节源码位置 https://github.com/golang-minibear2333/golang/blob/master/3.grammar-advancement/3.3-interface 3.3.1 接口 # 接口同 java 一样,可以把一堆有共性的方法定义在里面,但是比 java 灵活的是,不需要显式实现接口,你可以自己控制实现哪些方法。 不需要显式实现的意思

https://golang.coding3min.com/3.grammar-advancement/3-3-%E6%8E%A5%E5%8F%A3%E4%B8%8E%E5%A4%9A%E6%80%81/

Yerikshu commented 3 years ago

对鸭子类型的理解:如果一个东西看起来像是屎,闻起来也像屎,吃起来也像屎,那它可能是螺蛳粉……

minibear2333 commented 3 years ago

对鸭子类型的理解:如果一个东西看起来像是屎,闻起来也像屎,吃起来也像屎,那它可能是螺蛳粉……

你一定是个人才

uuk020 commented 3 years ago

您好, 请问如何理解函数返回接口, 而是返回结构体呢? 源码中的errors包中的这个如何理解, 谢谢

func New(text string) error {
    return &errorString{text}
}
minibear2333 commented 3 years ago

您好, 请问如何理解函数返回接口, 而是返回结构体呢? 源码中的errors包中的这个如何理解, 谢谢

func New(text string) error {
  return &errorString{text}
}

error是一个interface,errorString是一个struct,只要实现了interface的所有方法,那么代表实现了此interface

这里的返回等同赋值,把struct赋值给interface,代表他是此接口的一个实例

uuk020 commented 3 years ago

可以这么理解成下面这样代码吗?

package main

import (
    "fmt"
)

type walk interface {
    Walk() string   
}

type testString struct {
    s string    
}

func (e *testString) Walk() string {
    return e.s  
}

func New(text string) (r walk) {
    r = &testString{text}
    return  
}

func main() {
   a := New("222")
   fmt.Println(a.Walk())
}
minibear2333 commented 3 years ago

可以这么理解成下面这样代码吗?

package main

import (
  "fmt"
)

type walk interface {
    Walk() string 
}

type testString struct {
    s string  
}

func (e *testString) Walk() string {
    return e.s    
}

func New(text string) (r walk) {
    r = &testString{text}
    return    
}

func main() {
   a := New("222")
   fmt.Println(a.Walk())
}

对的