Golang之介面(interface)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Golang最重要的介面,,,,

package mainimport (    "fmt")//interface類型預設是指標/*介面的實現Golang中的介面,不需要顯示的實現。只需要一個變數,含有介面類型中的所有方法,那麼這個變數就實現這個介面因為Golang中沒有implement類似的關鍵字如果一個變數含有了多個interface類型的方法,那麼這個變數就實現了多個介面如果一個變數只含有了1個interface的部分方法,那麼這個變數沒有實現這個介面..一種事物的多種形態,都可以按照統一的介面進行操作*///介面嵌套type ReadWrite interface {    Read(b Buffer) bool    Write(b Buffer) bool}type Lock interface {    Lock()    Unlock()}//嵌套,繼承了前面四個方法,File就有6個方法type File interface {    ReadWrite    Lock    Close()}//類型斷言,由於介面是一般類型,不知道具體類型,如果要轉成具體類型可以採用以下方法進行轉換var t intvar x interface{}x=ty,ok=x.(int)//定義People結構體type People struct {    name string    age  int}//定義Test介面type Test interface {    //介面有2個方法    Print()    Sleep()}//定義structtype Student struct {    name  string    age   int    score int}//定義Print()方法func (p Student) Print() {    fmt.Println("name:", p.name)    fmt.Println("age:", p.age)    fmt.Println("score", p.score)}//Sleep方法func (p Student) Sleep() {    fmt.Println("student sleep")}func (people People) Print() {    fmt.Println("name:", people.name)    fmt.Println("age:", people.age)}func (p People) Sleep() {    fmt.Println("People Sleep")}func main() {    var t Test    //介面是個地址    fmt.Println(t)    var stu Student = Student{        name:  "stu1",        age:   20,        score: 200,    }    t = stu    t.Print()    t.Sleep()    fmt.Println("t:", t)}

 //介面,空介面

package mainimport "fmt"type Carer interface {    GetName() string    Run()    }func main() {    var a interface{} //空介面    var b int         //具體類型    //空介面可以保持任何類型的變數    a = b                           // b給a賦值,空介面可以容納任何類型    b=a //這是錯的    fmt.Printf("type of a:%T\n", a) // %T列印類型}

 //介面的實現(車,寶馬車)

package mainimport "fmt"type Carer interface {    GetName() string    Run()    DiDi()}type BMW struct {    Name string}//得實現介面所有的方法,才算實現了該介面func (p *BMW) GetName() string {    return p.Name}//因此還得實現RUN()//指標類型*BMW,也可以寫實值型別 (p BMW)func (p *BMW) Run() {    fmt.Printf("%s is running\n", p.Name)}//還得實現DiDi()func (p *BMW) DiDi() {    fmt.Printf("%s is didi\n", p.Name)}func main() {    var car Carer    fmt.Println(car)    //var bmw BMW    //bmw.Name = "BMW"    //寫法2    bmw := &BMW{        Name: "BMW",    }    car = bmw    car.Run()}
寶馬

 //Golang中的介面,不需要顯示的實現。只要一個變數,含有介面類型中的所有方法,那麼這個變數就實現了這個介面。

//因此Golang中沒有implement類似的關鍵字

//如果一個變數含有了多個interface類型的方法,那麼這個變數就實現了多個介面

package mainimport "fmt"type Carer interface {    GetName() string    Run()    DiDi()}type Test interface {    Hello()}//寶馬車type BMW struct {    Name string}//因此還得實現RUN()//得實現介面所有的方法,才算實現了該介面func (p *BMW) GetName() string {    return p.Name}//實現介面的Run()func (p *BMW) Run() {    fmt.Printf("%s is running\n", p.Name)}//還得實現DiDi()func (p *BMW) DiDi() {    fmt.Printf("%s is didi\n", p.Name)}func (p *BMW) Hello() {    fmt.Printf("hello,i'm %s \n", p.Name)}//比亞迪type BYD struct {    Name string}func (p *BYD) GetName() string {    return p.Name}func (p *BYD) Run() {    fmt.Printf("%s is running\n", p.Name)}func (p *BYD) DiDi() {    fmt.Printf("%s is didi\n", p.Name)}func main() {    var car Carer    var test Test    fmt.Println(car)    //var bmw BMW    //bmw.Name = "BMW"    //寫法2    bmw := &BMW{        Name: "BMW",    }    car = bmw    car.Run()    test = bmw    test.Hello()    byd := &BYD{        Name: "BYD",    }    car = byd    car.Run()}
比亞迪和寶馬

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.