主頁(yè) > 知識(shí)庫(kù) > go語(yǔ)言中的interface使用實(shí)例

go語(yǔ)言中的interface使用實(shí)例

熱門標(biāo)簽:電銷機(jī)器人可以補(bǔ)救房產(chǎn)中介嗎 騰訊外呼系統(tǒng)價(jià)格 百度地圖標(biāo)注搜索關(guān)鍵詞 谷歌便利店地圖標(biāo)注 最短的地圖標(biāo)注 電梯外呼訪客系統(tǒng) 浙江人工智能外呼管理系統(tǒng) 成都呼叫中心外呼系統(tǒng)平臺(tái) ?兓?

go語(yǔ)言中的interface是一組未實(shí)現(xiàn)的方法的集合,如果某個(gè)對(duì)象實(shí)現(xiàn)了接口中的所有方法,那么此對(duì)象就實(shí)現(xiàn)了此接口。與其它面向?qū)ο笳Z(yǔ)言不同的是,go中無需顯示聲明調(diào)用了哪個(gè)接口。

復(fù)制代碼 代碼如下:

package main
 
import (
 "fmt"
)
 
type I interface {
 Get() int
 Put(int)
}
 
type S struct{ i int }
 
func (p *S) Get() int  { return p.i }
func (p *S) Put(v int) { p.i = v }
 
type R struct{ i int }
 
func (p *R) Get() int  { return p.i }
func (p *R) Put(v int) { p.i = v }
 
func f1(p I) {
 fmt.Println(p.Get())
 p.Put(1)
}
 
//interface{}空接口,能接受任何類型。.(I)是類型斷言,用于轉(zhuǎn)換something到I類型的接口
func f2(p interface{}) {
 if t, ok := p.(S); ok {
  fmt.Println("S:", t)
 } else if t, ok := p.(I); ok {
  fmt.Println("I:", t.Get())
 }
}
 
func f3(p interface{}) {
 switch t := p.(type) {
 case S:
  fmt.Println("S:", t.Get())
 case R:
  fmt.Println("R:", t.Get())
 case I:
  fmt.Println("I:", t.Get())
 default:
  fmt.Println("unknow type")
 }
}
 
func main() {
 s := S{101}
 
 f1(s)
 f2(s)
 
 r := R{1111}
 f3(r)
}

如上結(jié)構(gòu)S實(shí)現(xiàn)了I的兩個(gè)方法,因此S實(shí)現(xiàn)了I。因?yàn)镾實(shí)現(xiàn)了I,因此可以調(diào)用f向其傳遞S類型值得指針。
 
總結(jié)如下:
(1)使用“comma, ok” 來判斷一個(gè)接口類型是否實(shí)現(xiàn)了某個(gè)特定接口:

復(fù)制代碼 代碼如下:

if t, ok := something.(I) ; ok {
// 對(duì)于某些實(shí)現(xiàn)了接口I 的
// t 是其所擁有的類型
}

(2)聲明為 interface 類型的變量,可以存儲(chǔ)任何實(shí)現(xiàn)了 interface 中所有方法的類型的變量
(3)空接口可代表任何類型,可做形參和返回類型

復(fù)制代碼 代碼如下:

package main
 
import "fmt"
 
func main() {
 //interface{}
 var i interface{} = 100
 var s interface{} = "hello"
 fmt.Printf("i = %d, s = %s\n", i, s)
 s = i
 fmt.Printf("i = %d, s = %d\n", i, s)
}

(4)interface組合

將一個(gè) interface1 嵌入到另一個(gè) interface2 的聲明中,其作用相當(dāng)于把 interface1 的函數(shù)包含到 interface2 中,但是組合中不同有重復(fù)的方法

  注:
  a. 只要兩個(gè)接口中的方法列表相同(與順序無關(guān)),即為相同的接口,可以相互賦值
  b. interface1 的方法列表屬于另一個(gè) interface2 的方法列表的子集,interface2 可以賦值給 interface1,反之不成立(因?yàn)榉椒ㄈ笔?,interface2 中的方法會(huì)覆蓋 interface1 中同名的方法
  c. 可以嵌入包中的 interface

您可能感興趣的文章:
  • Go語(yǔ)言中你不知道的Interface詳解
  • golang中interface接口的深度解析
  • Go語(yǔ)言interface 與 nil 的比較
  • 淺談Go語(yǔ)言中的結(jié)構(gòu)體struct & 接口Interface & 反射
  • Go語(yǔ)言interface詳解
  • Go之interface的具體使用

標(biāo)簽:紹興 上海 七臺(tái)河 眉山 邢臺(tái) 宜昌 雅安 盤錦

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go語(yǔ)言中的interface使用實(shí)例》,本文關(guān)鍵詞  語(yǔ)言,中的,interface,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go語(yǔ)言中的interface使用實(shí)例》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于go語(yǔ)言中的interface使用實(shí)例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章