go語言實現(xiàn)接口查詢
一句話總結:如果接口A實現(xiàn)了接口B中所有方法,那么A可以轉化為B接口。
package options type IPeople interface { GetName() string } type IPeople2 interface { GetName() string GetAge() int } package main import ( "fmt" "options" ) type person struct { name string } func (p *person) GetName() string { return p.name } type person2 struct { name string age int } func (p *person2) GetName() string { return p.name } func (p *person2) GetAge() int { return p.age } func main() { //p不可以轉化為options.IPeople2接口,沒有實現(xiàn)options.IPeople2接口中的GetAge() var p options.IPeople = &person{"jack"} if p2, ok := p.(options.IPeople2); ok { fmt.Println(p2.GetName(), p2.GetAge()) } else { fmt.Println("p不是Ipeople2接口類型") } //p2可以轉化為options.IPeople接口,因為實現(xiàn)了options.IPeople接口的所有方法 var p2 options.IPeople2 = &person2{"mary", 23} if p, ok := p2.(options.IPeople); ok { fmt.Println(p.GetName()) } var pp options.IPeople = &person{"alen"} if pp2, ok := pp.(*person); ok { fmt.Println(pp2.GetName()) //pp接口指向的對象實例是否是*person類型,*不能忘 } switch pp.(type) { case options.IPeople: fmt.Println("options.IPeople") //判斷接口的類型 case options.IPeople2: fmt.Println("options.IPeople2") default: fmt.Println("can't found") } var ii interface{} = 43 //默認int類型 switch ii.(type) { case int: fmt.Println("int") default: fmt.Println("can't found") } }
補充:golang中Any類型使用及空接口中類型查詢
1.Any類型
GO語言中任何對象實例都滿足空接口interface{},空接口可以接口任何值
var v1 interface{} = 1 var v2 interface{} = "abc" var v3 interface{} = 2.345 var v4 interface{} = make(map[..]...) ....
2.1 關于空接口的類型查詢方式一,使用ok
package main import "fmt" //空接口可以接受任何值 //interface { } func main() { var v1 interface{ } v1 = 6.78 //賦值一個變量v判斷其類型是否為float64,是則為真,否則,為假 if v, ok := v1.(float64);ok{ fmt.Println(v, ok) }else { fmt.Println(v,ok) } }
2.2 關于空接口類型查詢方式二,switch語句結合 var.type()
package main import "fmt" //空接口可以接受任何值 //interface { } func main() { var v1 interface{ } v1 = "張三" switch v1.(type) { case float32: case float64: fmt.Println("this is float64 type") case string: fmt.Println("this is string type") } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
Golang Gin框架實現(xiàn)多種數(shù)據(jù)格式返回結果詳解
這篇文章主要介紹了Golang Gin框架實現(xiàn)多種數(shù)據(jù)格式返回結果,我們都知道,一個完整的請求包含請求和處理請求以及結果返回三個步驟,在服務器端對請求處理完成以后,會將結果返回給客戶端,在gin框架中,支持返回多種請求數(shù)據(jù)格式,下面我們一起來看看2023-05-05go語言在請求http時加入自定義http header的方法
這篇文章主要介紹了go語言在請求http時加入自定義http header的方法,實例分析了Go語言http請求的原理與操作技巧,需要的朋友可以參考下2015-03-03Golang回調(diào)函數(shù)與閉包和接口函數(shù)的定義及使用介紹
這篇文章主要介紹了Golang回調(diào)函數(shù)與閉包和接口函數(shù)的定義及使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-05-05使用Gin框架返回JSON、XML和HTML數(shù)據(jù)
Gin是一個高性能的Go語言Web框架,它不僅提供了簡潔的API,還支持快速的路由和中間件處理,在Web開發(fā)中,返回JSON、XML和HTML數(shù)據(jù)是非常常見的需求,本文將介紹如何使用Gin框架來返回這三種類型的數(shù)據(jù),需要的朋友可以參考下2024-08-08