欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2015年05月12日 10:55:30   投稿:junjie  
這篇文章主要介紹了go語言中的interface使用實(shí)例,go語言中的interface是一組未實(shí)現(xiàn)的方法的集合,如果某個(gè)對象實(shí)現(xiàn)了接口中的所有方法,那么此對象就實(shí)現(xiàn)了此接口,需要的朋友可以參考下

go語言中的interface是一組未實(shí)現(xiàn)的方法的集合,如果某個(gè)對象實(shí)現(xiàn)了接口中的所有方法,那么此對象就實(shí)現(xiàn)了此接口。與其它面向?qū)ο笳Z言不同的是,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 {
// 對于某些實(shí)現(xiàn)了接口I 的
// t 是其所擁有的類型
}

(2)聲明為 interface 類型的變量,可以存儲任何實(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

相關(guān)文章

  • Go語言Gin處理響應(yīng)方式詳解

    Go語言Gin處理響應(yīng)方式詳解

    gin框架封裝了常用的數(shù)據(jù)格式方法響應(yīng)于客戶端,下面這篇文章主要給大家介紹了關(guān)于Go語言Gin處理響應(yīng)方式的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • golang定時(shí)器Timer的用法和實(shí)現(xiàn)原理解析

    golang定時(shí)器Timer的用法和實(shí)現(xiàn)原理解析

    這篇文章主要介紹了golang定時(shí)器Ticker,本文主要來看一下Timer的用法和實(shí)現(xiàn)原理,需要的朋友可以參考以下內(nèi)容
    2023-04-04
  • Go語言操作MySQL的知識總結(jié)

    Go語言操作MySQL的知識總結(jié)

    Go語言中的database/sql包提供了保證SQL或類SQL數(shù)據(jù)庫的泛用接口,并不提供具體的數(shù)據(jù)庫驅(qū)動(dòng)。本文介紹了Go語言操作MySQL的相關(guān)知識,感興趣的可以了解一下
    2022-11-11
  • 一文帶你深入理解Golang中的泛型

    一文帶你深入理解Golang中的泛型

    Go?在泛型方面一直被詬病,因?yàn)樗谶@方面相對比較落后。但是,在?Go?1.18?版本中,泛型已經(jīng)被正式引入,成為了?Go?語言中一個(gè)重要的特性。本文將會(huì)詳細(xì)介紹?Go?泛型的相關(guān)概念,語法和用法,希望能夠幫助大家更好地理解和應(yīng)用這一特性
    2023-05-05
  • goland中文件頭自動(dòng)注釋的操作

    goland中文件頭自動(dòng)注釋的操作

    這篇文章主要介紹了goland中文件頭自動(dòng)注釋的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang?gorm開發(fā)架構(gòu)及寫插件示例

    golang?gorm開發(fā)架構(gòu)及寫插件示例

    這篇文章主要為大家介紹了golang?gorm開發(fā)架構(gòu)及寫插件的詳細(xì)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Golang中的包及包管理工具go?mod詳解

    Golang中的包及包管理工具go?mod詳解

    這篇文章主要介紹了Golang中的包及包管理工具go?mod,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang Defer關(guān)鍵字特定操作詳解

    Golang Defer關(guān)鍵字特定操作詳解

    defer是Go語言中的延遲執(zhí)行語句,用來添加函數(shù)結(jié)束時(shí)執(zhí)行的代碼,常用于釋放某些已分配的資源、關(guān)閉數(shù)據(jù)庫連接、斷開socket連接、解鎖一個(gè)加鎖的資源,這篇文章主要介紹了golang中的defer函數(shù)理解,需要的朋友可以參考下
    2023-03-03
  • go微服務(wù)PolarisMesh源碼解析服務(wù)端啟動(dòng)流程

    go微服務(wù)PolarisMesh源碼解析服務(wù)端啟動(dòng)流程

    這篇文章主要為大家介紹了go微服務(wù)PolarisMesh源碼解析服務(wù)端啟動(dòng)流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Golang如何交叉編譯各個(gè)平臺的二進(jìn)制文件詳解

    Golang如何交叉編譯各個(gè)平臺的二進(jìn)制文件詳解

    這篇文章主要給大家介紹了關(guān)于Golang如何交叉編譯各個(gè)平臺的二進(jìn)制文件的相關(guān)資料,并介紹了golang如何讓編譯生產(chǎn)的二進(jìn)制文件變小,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08

最新評論