Golang介面interface的使用

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

關鍵字interface

  • 如果一個結構體綁定的方法包含介面的所有方法,即認為實現了該介面
  • 將對象賦值給介面時,會發生拷貝,而介面的儲存是指向這個複製的指標,複製的無法修改原來狀態,也無法擷取指標
type CallBack interface{    getName() string}type User struct{    name string}func (user User) getName()string{    return user.name}user:=User{}f.println(user.getName())
  • 上面聲明了一個CallBack,結構體User綁定了一個getName的方法,跟CallBack介面所聲明的介面名稱一樣,而且實現了CallBack介面的所有方法(他現在只聲明了一個介面方法),所以結構體User實現了CallBack介面
  • 介面可以跟介面嵌套,有點類似結構體嵌套一樣
type CallBack interface{    getName() string    BaseCall}type BaseCall interface{    doSomething()}func (user User) doSomething(){    f.println("something to do")}func (user User) getName()string{    return user.name}user:=User{}user.doSomething()f.println(user.getName())
  • 根據介面擷取實現的結構體的對象,進行一些操作
//強制轉換,判斷User結構體是否實現了CallBack介面func hasInterface(callback CallBack){    if u,ok:=callback.(User);ok{        f.Println("name is:",u.name)        return    }    f.Println("not has interface")}
  • 在golang中,所以結構體都實現了一個空的介面,所以,上面可以改造一個伸縮性比較好的判斷,符合哪個,t自動強轉該類型
func hasInterface(intf interface{}){    switch t:=intf.(type){        case User:        f.println("struct is:",t.name)        default:        f.println("unknow")    }}
  • 介面之間可以強轉,但是只能上轉下,就是外部的介面可以強轉嵌套內的介面,但是嵌套內的介面不能強轉外部的介面,有點像繼承子類強轉父類,但是父類不能強轉子類一樣
callBack := User{Info: Info{name: "key le "}}var base BaseCallbase=BaseCall(callBack)base.doSomething()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.