1.把接口轉(zhuǎn)為結(jié)構(gòu)體,再塞給一個(gè)結(jié)構(gòu)體的變量
package main
//把接口轉(zhuǎn)為結(jié)構(gòu)體,再塞給一個(gè)結(jié)構(gòu)體的變量
// 結(jié)構(gòu)體=接口.(結(jié)構(gòu)體)
import "fmt"
type Point struct {
x int
y int
}
func main() {
var a interface{}
var point Point = Point{1, 2}
a = point //ok,什么東西都能塞給空接口
//將a賦給一個(gè)Point變量
var b Point
//b = a 失敗,因?yàn)榭战涌诓荒苋o具體類型
b = a.(Point)
fmt.Println(b)
//類型斷言的其他案例
var x interface{}
var b2 float32 = 1.1
x = b2 //變量塞給空接口,可以【類型推斷】
y, ok := x.(float64)
if ok == true {
fmt.Println("convert success")
fmt.Printf("y的類型是%T 值是=%v", y, y)
} else {
fmt.Println("convert fail")
}
fmt.Println("繼續(xù)胡扯")
}
{1 2}
convert fail
繼續(xù)胡扯
?2.接口體現(xiàn)多態(tài):多態(tài)參數(shù)
package main
//接口,接口體現(xiàn)多態(tài):多態(tài)參數(shù)
import "fmt"
// interface不能包含任何變量
type Usb interface {
start()
stop()
}
// 手機(jī)實(shí)現(xiàn)User方法
type Phone struct {
name string
}
func (p Phone) start() {
fmt.Println("手機(jī)開始工作")
}
func (p Phone) stop() {
fmt.Println("手機(jī)停止工作")
}
func (p Phone) Call() {
fmt.Println("手機(jī)再打電話...")
}
type Camera struct {
name string
}
func (c Camera) start() {
fmt.Println("攝像機(jī)開始工作")
}
func (c Camera) stop() {
fmt.Println("攝像機(jī)停止工作")
}
// 計(jì)算機(jī)
type Computer struct {
}
// Working方法,接受一個(gè)User接口的類型變量
func (c Computer) Working(usb Usb) {
//通過接口變量來調(diào)用start,stop方法
usb.start()
//如果usb指向Phone,運(yùn)行Call方法
//類型斷言...
if phone, ok := usb.(Phone); ok {
phone.Call()
}
usb.stop()
}
func main() {
//定義一個(gè)usb數(shù)組,可以存放Phone和Camera結(jié)構(gòu)體變量
//這里就體現(xiàn)出多態(tài)數(shù)組
var usbArr [3]Usb
usbArr[0] = Phone{"oppo"}
usbArr[1] = Phone{"vivo"}
usbArr[2] = Camera{"索尼"}
fmt.Println(usbArr)
var computer Computer
for _, v := range usbArr {
computer.Working(v)
}
}
手機(jī)停止工作
手機(jī)開始工作
手機(jī)再打電話...
手機(jī)停止工作
攝像機(jī)開始工作
攝像機(jī)停止工作
3.編寫一個(gè)函數(shù),可以判斷輸入的參數(shù)是什么類型
package main
import "fmt"
//編寫一個(gè)函數(shù),可以判斷輸入的參數(shù)是什么類型
func TypeJudge(items ...interface{}) {
for index, x := range items {
switch x.(type) {
case bool:
fmt.Printf("第%v個(gè)參數(shù)是bool類型,值是%v\n", index, x)
case float32:
fmt.Printf("第%v個(gè)參數(shù)是float32類型,值是%v\n", index, x)
case float64:
fmt.Printf("第%v個(gè)參數(shù)是float64類型,值是%v\n", index, x)
case int, int32, int64:
fmt.Printf("第%v個(gè)參數(shù)是int類型,值是%v\n", index, x)
case string:
fmt.Printf("第%v個(gè)參數(shù)是string類型,值是%v\n", index, x)
default:
fmt.Printf("第%v個(gè)參數(shù)的類型不確定,值是%v\n", index, x)
}
}
}
func main() {
var n1 float32 = 1.1
var n2 float64 = 2.3
var n3 int32 = 30
var name string = "tom"
address := "北京"
n4 := 3000
TypeJudge(n1, n2, n3, name, address, n4)
}
第0個(gè)參數(shù)是float32類型,值是1.1
第1個(gè)參數(shù)是float64類型,值是2.3
第2個(gè)參數(shù)是int類型,值是30
第3個(gè)參數(shù)是string類型,值是tom
第4個(gè)參數(shù)是string類型,值是北京
第5個(gè)參數(shù)是int類型,值是3000
文章來源地址http://www.zghlxwxcb.cn/news/detail-704240.html
文章來源:http://www.zghlxwxcb.cn/news/detail-704240.html
到了這里,關(guān)于Golang的類型斷言的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!