Golang笔记

golang interface 概念理解

比如有一些不同的数据结构structs (Models),都有相同的函数,如(Update, Delete, Show),这时候应该引入interface。

如下面一个例子:

package main

import "fmt"

type human struct {
    something string
}
type animal struct {
    whatever string
}

func (a *animal) Speak() string {
    return a.whatever
}
func (h *human) Speak() string {
    return h.something
}

type living interface {
    Speak() string
}

func AnyMethod(l living) {
    fmt.Println(l.Speak())
}

func main() {
    fmt.Println("Hello, playground")
    john := human{"I am john"}
    tom := animal{"Bow Bow"}

    AnyMethod(&john)
    AnyMethod(&tom)

}

运行输出:

Hello, playground
I am john
Bow Bow

再看一个例子加强印象:

package main

import "fmt"

type A struct {
    Value string
}

func (a *A) Read() string {
    return a.Value
}

func (a *A) Write(s string) {
    a.Value = s
}

type B struct {
    Value string
}

func (b *B) Read() string {
    return b.Value
}

func (b *B) Write(s string) {
    b.Value = s
}

type ReadWriter interface {
    Read() string
    Write(s string)
}

func WriteRead(rw ReadWriter, s string) string {
    rw.Write(s)
    return rw.Read()
}

func main() {
    a := A{}
    b := B{}
    fmt.Println(WriteRead(&a, "a: write"))
    fmt.Println(WriteRead(&b, "b: write"))
}
本文网址: https://golangnote.com/topic/76.html (转载注明出处)
关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。如果你有任何问题可以在下面 留言
Be the first to comment!
Captcha image
Relative Articles