型別斷言,由於介面是一般型別,不知道具體型別,如果要轉成具體型別,就需要使用型別斷言
//型別斷言
func typeassertion()
x = t //ok
//待檢測的型別斷言
y , res := x.(float32)
if res else
y1 ,res1 := x.(int32)//轉成float
if res1 else
}
1、在前面【go語言使用之物件導向程式設計(8)物件導向三大特徵之多型】的usb介面案例做改進:
給phone結構體增加乙個特有的方法call(), 當usb 介面接收的是phone 變數時,還需要呼叫call方法.
/*最佳實踐1*/
//型別斷言使用
func (p phone) call()
func (c camputer) working1(usb usb)
usb.boot()
usb.shutdown()
usb.charging()
}func typeassertion1()
c := camera
cap := camputer{}
cap.working1(p)
cap.working1(c)
}
2、寫一函式,迴圈判斷傳入引數的型別
/*最佳實踐2*/
func typeassertion2() // 這個是乙個空介面
var n int32 =80
// t = n // 將 n 賦值給 t
//寫一**,判斷 t究竟指向什麼型別 type-switch 又叫 型別斷言
// i := t.(type) 有兩個作用
// (1) 先嘗試將 t 轉成實際指向的資料型別
// (2) 如果轉成功,就會將實際指向的值,賦給 i
// (3)
switch i := t.(type)
}
Go之型別斷言
一 由於介面是基本型別,不知道具體型別,如果要轉成具體型別需要使用型別斷言 package main import fmt type dy struct func main var dy dy dy i1 dy var i2 dy dy i1 會報錯 型別斷言才能把介面轉為具體型別 i2 i1.dy...
GO 物件導向 多型之型別斷言
在物件導向 多型這一節最後沒有進行型別斷言,也就是型別判斷。那麼在這篇文章中就簡單的介紹一下 在進行型別斷言會有倆種方式 switch是使用型別來判斷 也就是s.type if判斷是把指標跟定義的值判斷 package main import fmt 定義工人介面 type worker1 inte...
Go語言型別轉換和型別斷言
型別轉換在編譯期完成,包括強制轉換和隱式轉換 型別斷言在執行時確定,包括安全型別斷言和非安全型別斷言 go語言要求不同型別之間必須做顯式的型別轉換。但似乎涉及到介面型別時,就會有所不同。兩種型別斷言 不安全的型別斷言,如果系統檢測到不匹配,會在執行時呼叫內建的panic,丟擲異常 s abc i s...