Go 介面 學習筆記
介面interface
- 介面是一個或多個方法簽名的集合
- 只要某個型別擁有該介面的所有方法簽名,即算實現該介面,無需顯式宣告實現了哪個介面,這稱為 Structural Typing
- 介面只有方法宣告,沒有實現,沒有資料欄位
- 介面可以匿名嵌入其它介面,或嵌入到結構中
- 將物件賦值給介面時,會發生拷貝,而介面內部儲存的是指向這個複製品的指標,既無法修改複製品的狀態,也無法獲取指標
- 只有當介面儲存的型別和物件都為nil時,介面才等於nil
- 介面呼叫不會做receiver的自動轉換
- 介面同樣支援匿名欄位方法
- 介面也可實現類似OOP中的多型
- 空介面可以作為任何型別資料的容器
package main
import (
"fmt"
)
func main() {
var a interface{}
fmt.Println(a == nil)
var p *int = nil
a = p
fmt.Println(a == nil)
}
輸出結果:
型別斷言
- 通過型別斷言的ok pattern可以判斷介面中的資料型別
- 使用type switch則可針對空介面進行比較全面的型別判斷
介面轉換
- 可以將擁有超集的介面轉換為子集的介面
package main
import (
"fmt"
)
//介面巢狀
type Phone interface {
Name() string
Connector
}
type Connector interface {
Connect()
}
type NokiaPhone struct {
name string
}
func main() {
var a Phone
a = NokiaPhone{"phone"}
a.Connect()
DisConnect(a)
}
func (np NokiaPhone) Name() string {
return np.name
}
func (np NokiaPhone) Connect() {
fmt.Println("Connect")
}
// func DisConnect(phone Phone) {
// //型別斷言
// // <目標型別的值>,<布林引數> := <表示式>.( 目標型別 ) // 安全型別斷言
// if pc, ok := phone.(NokiaPhone); ok {
// fmt.Println("DisConnect", pc.name)
// return
// }
// fmt.Println("unknown decive")
// }
// //傳入空介面表示,可以傳入任何值
// func DisConnect(phone interface{}) {
// //型別斷言
// // <目標型別的值>,<布林引數> := <表示式>.( 目標型別 ) // 安全型別斷言
// if pc, ok := phone.(NokiaPhone); ok {
// fmt.Println("DisConnect", pc.name)
// return
// }
// fmt.Println("unknown decive")
// }
func DisConnect(phone interface{}) {
switch v := phone.(type) {
case NokiaPhone:
fmt.Println("DisConnect", v.name)
default:
fmt.Println("unknown decive")
}
}
輸出結果:
本文參考整理自:《Go 程式設計基礎》
個人微信公眾號:
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- 【Go學習筆記13】介面和實現Go筆記
- Go語言學習筆記 - PART9 - 介面Go筆記
- Go 學習筆記Go筆記
- interface 介面 -Go 學習記錄Go
- GO 方法學習筆記Go筆記
- go channel學習筆記Go筆記
- go defer 學習筆記Go筆記
- go 學習筆記---切片Go筆記
- Go 方法 學習筆記Go筆記
- Go 反射 學習筆記Go反射筆記
- 【學習筆記】Go Modules 使用筆記Go
- Go 進階學習筆記Go筆記
- go 閉包學習筆記Go筆記
- go 學習筆記---map(字典)Go筆記
- 【Go學習筆記4】切片Go筆記
- Go 函式 學習筆記Go函式筆記
- Go 結構 學習筆記Go筆記
- go學習筆記——gin框架Go筆記框架
- TS學習筆記(二):介面筆記
- go 學習筆記之初識 go 語言Go筆記
- Go 入門指南學習筆記Go筆記
- GO 學習筆記->結構體Go筆記結構體
- go-ethereum學習筆記(一)Go筆記
- Go學習筆記-GMP詳解Go筆記
- Go學習筆記-Zap日誌Go筆記
- Go型別特性-學習筆記Go型別筆記
- go學習筆記劃重點Go筆記
- 【Go學習筆記16】解析xmlGo筆記XML
- 【Go學習筆記15】解析yamlGo筆記YAML
- 【Go】Go語言學習筆記-3-包Go筆記
- Go學習筆記 - Go 基礎語法(1)Go筆記
- Go 學習筆記 - Go 基礎語法(2)Go筆記
- Go 邊看邊練 - 《Go 學習筆記》系列Go筆記
- [go 學習筆記] 二、變數、常量Go筆記變數
- go 學習筆記之工作空間Go筆記
- Go學習筆記-Gin常用功能Go筆記
- 【Go學習筆記11】併發(一)Go筆記
- GO 學習筆記 (三) : method 和 interfaceGo筆記