這幾天一直在看go語言知識,其中對介面的知識點有點模糊,所以整理一下。
type 介面名 inte***ce
注意:介面裡的方法可以為空,也就是乙個空介面。下面舉個例子:
//定義people介面,有乙個說名字的方法
type people inte***ce
//宣告了乙個people型別的變數p
var p people
如果乙個物件實現了介面中的所有方法,則說這個物件實現了這個介面。go語言中的不同型別可以實現同乙個介面。舉例子:
//定義乙個people介面
type people inte***ce
//定義乙個學生型別
type student struct
//定義乙個工人型別
type worker struct
//學生型別實現sayname方法
func (s student)sayname() string
//工人型別實現sayname方法
func (w worker)sayname() string
func main()
p = student
fmt.println(p.sayname())
fmt.printf("%t\n",p)
worker:=worker
p = worker
fmt.println(p.sayname())
fmt.printf("%t\n",p)
}
以上會輸出
張三
main.student
小王main.worker
//定義乙個people介面
type people inte***ce
//定義乙個學生型別
type student struct
//學生型別實現sayname方法
func (s student)sayname() string
//檢查結構體都實現了介面了沒有
func checkpepole(tmp inte***ce{})
}func main()
checkpepole(student)
}
如果乙個介面裡面沒有任何方法,則稱為空介面,任何型別都實現了空介面,所以任何型別都可以給空介面賦值。
func main()
var i int = 5
var s string = "hello world"
type student struct
student:=student
// tmp可以儲存任意型別的數值
tmp = i
tmp = s
tmp = student
}
既然空介面可以儲存任何型別的資料,就需要判斷出變數的具體型別。
介面斷言有兩種方法,第一種是x.(type),x為介面型別的變數,返回變數的型別,這種方法需要再switch case語句中使用。第二種是x.(t),x為介面型別的變數,t為x可能的型別,變數的值和是否是這個型別的結果。
//斷言-switch判斷
func judgetypeswith(v inte***ce{})
}//斷言 ok
func judgetypecomma(v inte***ce{})else if _,ok :=v.(int);ok else if _,ok :=v.(student);okelse
}func main()
31 說說 Go 語言中的空介面
空介面是特殊形式的介面型別,普通的介面都有方法,而空介面沒有定義任何方法口,也因此,我們可以說所有型別都至少實現了空介面。type empty iface inte ce每乙個介面都包含兩個屬性,乙個是值,乙個是型別。而對於空介面來說,這兩者都是 nil,可以使用 fmt 來驗證一下 package...
Go語言中的介面物件轉型
go語言中介面物件轉型,有2種方式。案例如下 myinte cechg project main.go package main import fmt math 1.定義乙個介面 type shape inte ce 2.矩形 type rectangle struct 3.三角形 type str...
go 語言中的繼承
go 語言中可以通過匿名field來實現繼承的效果,type t1 struct func t t1 log func t t1 print type t2 struct t2 t2 可以通過t2.log 直接訪問t1的method,就像物件導向的繼承之後一樣訪問,不過這裡要注意的傳遞到log的是t...