日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Go - interface

發布時間:2025/5/22 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go - interface 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在go語言中,也有接口的定義。但是和其他語言不同的是,go語言的接口比較“特殊”。。。

?

定義

接口是一個或者多個方法簽名的集合,它之后方法的定義,沒有方法的實現,也不能在其中定義字段。

// interface.go package mainimport ("fmt" )type IUSB interface {GetName() stringConnect() }func main() {fmt.Println("Hello World!") }

?

實現接口

在go語言中,通過定義類型來實現接口。實現接口的時候,無需顯示指定實現了那個接口(這與其他語言不同),只需要定義出所需實現接口的所有方法即可。我們成這種方式為(Structural typing).

// interface.go package mainimport ("fmt" )type IUSB interface {GetName() stringConnect() }type CellPhoneUSB struct {Name string }func (cp CellPhoneUSB) GetName() string {return cp.Name }func (cp CellPhoneUSB) Connect() {fmt.Println("cell phone connected...", cp.Name) }func main() {var a IUSBa = CellPhoneUSB{"myCellPhone"}a.Connect() }

我們先看下輸出結果:

?

可以看到,我們定義了一個類型是CellPhoneUSB,它實現了IUSB中的兩個方法GetName()和Connect().?

在main函數里面,我們定義了一個變量a,它的類型是接口IUSB,然后我們將a轉換成為一個type(CellPhoneUSB),在此之后,我們調用了類型CellPhoneUSB的connect方法。

?

?

接口嵌套

當我們需要將明確接口的層次結構的時候,就需要使用接口的嵌套。例如

type Connector interface {Connect() }type IUSB interface {GetName() stringConnector }

?

類型判斷

有時候,由于我們實現的類型是實現了某種嵌套的接口,這時就需要我們進行類型判斷。 閑話少說,上code

// interface.go package mainimport ("fmt" )type Connector interface {Connect() }type IUSB interface {GetName() stringConnector }type CellPhoneUSB struct {Name string }func (cp CellPhoneUSB) GetName() string {return cp.Name }func (cp CellPhoneUSB) Connect() {fmt.Println("cell phone connected...", cp.Name) }func Disconnect(connector Connector) {if pc, ok := connector.(CellPhoneUSB); ok {fmt.Println("disconnected ...", pc.Name)}fmt.Println("type unknown!") }func main() {var a IUSBa = CellPhoneUSB{"myCellPhone"}a.Connect()Disconnect(a) }

我們定義了一個Disconnect的方法,在其中需要判斷是否為指定的類型(CellPhoneUSB), 這里使用了表達式語句?

if pc, ok := connector.(CellPhoneUSB); ok {
...
}

:= 的右邊是 -> 類型實例.(期望類型)

?

空接口與type-switch

go語言允許我們使用空接口來模擬類似object類型的類型。此時,判斷類型實現了那個接口就稍顯復雜。不過我們可以用type-swtich語句來處理。

func GetType(obj interface{}) {switch result := obj.(type) {case CellPhoneUSB:fmt.Println("It is a cell phone usb", result.Name)default:fmt.Println("Unknown type...")} }

?

?

使用接口的規則

1. 調用接口傳入對象時,無論怎樣定義,都是對象的 copy, 因此,無法改變原對象。

2.?只有當接口存儲的類型和對象都為nil時,接口才等于nil。

?



轉載于:https://www.cnblogs.com/atuotuo/p/7048778.html

總結

以上是生活随笔為你收集整理的Go - interface的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。