【Go】基礎語法之接口


接口定義:

利用關鍵字interface來定義一個接口,接口是一組方法的集合。

例如:

type People interface {
    Show(name string, age int) (id int, err error)  
    Set(name string, age int)
}

接口的實現:

跟結構體的成員方法實現是一樣的。

func (object of implement func) func_name (parameters) (return type){

    ....//func body

}

例如:

package main

import "fmt"
func main() {
    fmt.Println("=================Live interface===============")
    var live Live
    s := &Student{People{"puyangsky", 22, 007}, 0}
    live = s
    live.speak("I am happy")
    live.eat()
    fmt.Println("================Earn interface================")
    var earn Earn
    earn = &Worker{People{"humeiling", 22, 002}, 0}
    earn.eat()
    earn.work()
    earn.getMoney(100)
    fmt.Println("=====================End======================")
}


type People struct {
    name string
    age int32
    id int32
}

type Student struct{
    People
    grade float32
}

type Worker struct{
    People
    salary float32
}

type Live interface {
    eat()
    speak(something string)
}

type Earn interface {
    eat()
    work()
    getMoney(money int32)
}

func (s *Student) eat()  {
    fmt.Printf("%s is eating...\n", s.name)
}

func (s *Student) speak(something string) {
    fmt.Printf("%s is speaking: %s\n", s.name, something)
}

func (w *Worker) eat()  {
    fmt.Printf("%s is eating ...\n", w.name)
}

func (w *Worker) work()  {
    fmt.Printf("%s is working...\n", w.name)
}

func (w *Worker) getMoney(money int32) {
    fmt.Printf("%s earned %d money..\n", w.name, money)
}

結果如下:

 

接口的使用:

一個結構體必須實現了一個接口的所有方法,才能被一個接口對象接受。這一點和Java語言中的接口的要求是一樣的。

例如上例中的Live接口的對象live,只能接受實現了Live接口所有方法的Student結構體的對象,而不能接受其他結構體的對象。

一個接口可以被多個結構體實現,一個結構體可以實現多個接口的方法,是多對多的關系。

使用方法:先定義一個接口的對象,用實現了該接口所有方法的結構體的對象來初始化該接口對象,然后就可以通過該接口對象來訪問接口的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM