go語言中的interface使用實例
go語言中的interface是一組未實現(xiàn)的方法的集合,如果某個對象實現(xiàn)了接口中的所有方法,那么此對象就實現(xiàn)了此接口。與其它面向?qū)ο笳Z言不同的是,go中無需顯示聲明調(diào)用了哪個接口。
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實現(xiàn)了I的兩個方法,因此S實現(xiàn)了I。因為S實現(xiàn)了I,因此可以調(diào)用f向其傳遞S類型值得指針。
總結(jié)如下:
(1)使用“comma, ok” 來判斷一個接口類型是否實現(xiàn)了某個特定接口:
if t, ok := something.(I) ; ok {
// 對于某些實現(xiàn)了接口I 的
// t 是其所擁有的類型
}
(2)聲明為 interface 類型的變量,可以存儲任何實現(xiàn)了 interface 中所有方法的類型的變量
(3)空接口可代表任何類型,可做形參和返回類型
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組合
將一個 interface1 嵌入到另一個 interface2 的聲明中,其作用相當(dāng)于把 interface1 的函數(shù)包含到 interface2 中,但是組合中不同有重復(fù)的方法
注:
a. 只要兩個接口中的方法列表相同(與順序無關(guān)),即為相同的接口,可以相互賦值
b. interface1 的方法列表屬于另一個 interface2 的方法列表的子集,interface2 可以賦值給 interface1,反之不成立(因為方法缺失),interface2 中的方法會覆蓋 interface1 中同名的方法
c. 可以嵌入包中的 interface
相關(guān)文章
go-micro集成RabbitMQ實戰(zhàn)和原理詳解
本文主要介紹go-micro使用RabbitMQ收發(fā)數(shù)據(jù)的方法和原理,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05golang中byte和rune用法及新手易錯點總結(jié)
golang內(nèi)置類型有rune類型和byte類型,下面這篇文章主要給大家介紹了關(guān)于golang中byte和rune用法及新手易錯點總結(jié)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-03-03基于Go+OpenCV實現(xiàn)人臉識別功能的詳細示例
OpenCV是一個強大的計算機視覺庫,提供了豐富的圖像處理和計算機視覺算法,本文將向你介紹在Mac上安裝OpenCV的步驟,并演示如何使用Go的OpenCV綁定庫進行人臉識別,需要的朋友可以參考下2023-07-07Go語言實現(xiàn)廣播式并發(fā)聊天服務(wù)器
本文主要介紹了Go語言實現(xiàn)廣播式并發(fā)聊天服務(wù)器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08