網(wǎng)站首頁 編程語言 正文
類型查詢
我們知道interface的變量里面可以存儲(chǔ)任意類型的數(shù)值(該類型實(shí)現(xiàn)了interface)。那么我們?cè)趺捶聪蛑肋@個(gè)變量里面實(shí)際保存了的是哪個(gè)類型的對(duì)象呢?目前常用的有兩種方法:
- comma-ok斷言
- switch測(cè)試
1.comma-ok斷言
Go語言里面有一個(gè)語法,可以直接判斷是否是該類型的變量: value, ok = element.(T),這里value就是變量的值,ok是一個(gè)bool類型,element是interface變量,T是斷言的類型。
如果element里面確實(shí)存儲(chǔ)了T類型的數(shù)值,那么ok返回true,否則返回false。
var i []interface{} i = append(i, 10, 3.14, "aaa", demo15) for _, v := range i { if data, ok := v.(int); ok { fmt.Println("整型數(shù)據(jù):", data) } else if data, ok := v.(float64); ok { fmt.Println("浮點(diǎn)型數(shù)據(jù):", data) } else if data, ok := v.(string); ok { fmt.Println("字符串?dāng)?shù)據(jù):", data) } else if data, ok := v.(func()); ok { //函數(shù)調(diào)用 data() } }
2. switch測(cè)試
var i []interface{} i = append(i, 10, 3.14, "aaa", demo15) for _,data := range i{ switch value:=data.(type) { case int: fmt.Println("整型",value) case float64: fmt.Println("浮點(diǎn)型",value) case string: fmt.Println("字符串",value) case func(): fmt.Println("函數(shù)",value) } }
類型斷言
if判斷
package main import "fmt" type Student struct { name string id int } func main() { i := make([]interface{}, 3) i[0] = 1 //int i[1] = "hello go" //string i[2] = Student{"mike", 666} //Student //類型查詢,類型斷言 //第一個(gè)返回下標(biāo),第二個(gè)返回下標(biāo)對(duì)應(yīng)的值, data分別是i[0], i[1], i[2] for index, data := range i { //第一個(gè)返回的是值,第二個(gè)返回判斷結(jié)果的真假 if value, ok := data.(int); ok == true { fmt.Printf("x[%d] 類型為int, 內(nèi)容為%d\n", index, value) } else if value, ok := data.(string); ok == true { fmt.Printf("x[%d] 類型為string, 內(nèi)容為%s\n", index, value) } else if value, ok := data.(Student); ok == true { fmt.Printf("x[%d] 類型為Student, 內(nèi)容為name = %s, id = %d\n", index, value.name, value.id) } } }
Switch判斷
package main import "fmt" type Student struct { name string id int } func main() { i := make([]interface{}, 3) i[0] = 1 //int i[1] = "hello go" //string i[2] = Student{"mike", 666} //Student //類型查詢,類型斷言 for index, data := range i { switch value := data.(type) { case int: fmt.Printf("x[%d] 類型為int, 內(nèi)容為%d\n", index, value) case string: fmt.Printf("x[%d] 類型為string, 內(nèi)容為%s\n", index, value) case Student: fmt.Printf("x[%d] 類型為Student, 內(nèi)容為name = %s, id = %d\n", index, value.name, value.id) } } }
原文鏈接:https://www.cnblogs.com/guyouyin123/p/13877734.html
相關(guān)推薦
- 2022-11-30 react源碼層探究setState作用_React
- 2022-09-05 Spark Sql之count(distinct)分析&&學(xué)習(xí)&&驗(yàn)
- 2022-06-12 C語言?struct結(jié)構(gòu)體超詳細(xì)講解_C 語言
- 2022-06-01 Python處理日期和時(shí)間的方法總結(jié)_python
- 2022-10-12 排查服務(wù)器異常流量教程詳解_nginx
- 2022-05-02 C語言學(xué)生成績管理系統(tǒng)源碼_C 語言
- 2022-05-01 docker鏡像與傳統(tǒng)vm虛擬機(jī)區(qū)別及分析_docker
- 2023-04-19 Git綁定遠(yuǎn)程倉庫報(bào)錯(cuò)error: remote origin already exists.
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支