国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

go語言中的interface使用實例

2020-04-01 19:14:10
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了go語言中的interface使用實例,go語言中的interface是一組未實現的方法的集合,如果某個對象實現了接口中的所有方法,那么此對象就實現了此接口,需要的朋友可以參考下
 

go語言中的interface是一組未實現的方法的集合,如果某個對象實現了接口中的所有方法,那么此對象就實現了此接口。與其它面向對象語言不同的是,go中無需顯示聲明調用了哪個接口。

 

復制代碼代碼如下:

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)是類型斷言,用于轉換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)
}

 

如上結構S實現了I的兩個方法,因此S實現了I。因為S實現了I,因此可以調用f向其傳遞S類型值得指針。
 
總結如下:
(1)使用“comma, ok” 來判斷一個接口類型是否實現了某個特定接口:

復制代碼代碼如下:

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

 

(2)聲明為 interface 類型的變量,可以存儲任何實現了 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 的聲明中,其作用相當于把 interface1 的函數包含到 interface2 中,但是組合中不同有重復的方法

  注:
  a. 只要兩個接口中的方法列表相同(與順序無關),即為相同的接口,可以相互賦值
  b. interface1 的方法列表屬于另一個 interface2 的方法列表的子集,interface2 可以賦值給 interface1,反之不成立(因為方法缺失),interface2 中的方法會覆蓋 interface1 中同名的方法
  c. 可以嵌入包中的 interface


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉田县| 建瓯市| 堆龙德庆县| 茌平县| 延庆县| 娄烦县| 白河县| 罗平县| 称多县| 五寨县| 湾仔区| 古浪县| 东兴市| 通榆县| 赫章县| 玉田县| 邵阳市| 婺源县| 呼伦贝尔市| 清徐县| 武邑县| 阜康市| 安达市| 武夷山市| 衡山县| 漳浦县| 德江县| 那曲县| 池州市| 扶沟县| 安西县| 漠河县| 吐鲁番市| 望城县| 龙海市| 微博| 新源县| 玛曲县| 肇东市| 太保市| 洛阳市|