// interface 接口 練習(xí)
//實(shí)現(xiàn)接口的原則就是
//實(shí)現(xiàn)了它定義的方法,就默認(rèn)是實(shí)現(xiàn)了接口
package main
import "fmt"
//聲明一個(gè)接口
type USB interface {
//聲明方法Name, 并設(shè)置 返回值類型string
Name() string
//聲明方法Connect方法,無返回值
Connect()
}
//聲明一個(gè)類型,在Go語言中,對(duì)應(yīng)的就是struct類型
type PhoneConnector struct {
//聲明一個(gè)私有屬性
name string
}
//---------------------聲明完Name,Connector方法后,就是實(shí)現(xiàn)了USB接口了---------------------------
//使用receiver,將類型跟方法進(jìn)行綁定
func (pc PhoneConnector)Name() string{
return pc.name
}
func (pc PhoneConnector)Connector() {
fmt.Println("connected:\t", pc.name)
}
//--------------------------------------------------------------------------------------
func main() {
a := PhoneConnector{"apple"}
fmt.Println("Name:\t", a.Name())
a.Connector()
}
//interface 嵌套 練習(xí)測(cè)試
package main
import "fmt"
//定義一個(gè)空的接口
//這樣的話,所有的類,都默認(rèn)實(shí)現(xiàn)了這個(gè)接口,因?yàn)樗鼪]有方法
//定義的空接口,就相當(dāng)于定義了一 個(gè)Object對(duì)象,最高層
//都是它的子類了,就沒有任何限制了
type nullEmpty interface {
}
// 定義一個(gè) 父接口
type HOME interface {
//這個(gè)接口里,只定義一個(gè)方法
Name() string
}
//再定義一個(gè)接口, 這相當(dāng)于是子接口了
type MyHome interface {
Show() string
//這樣就嵌套了 一個(gè)接口
HOME
}
//聲明一個(gè)結(jié)構(gòu)類型
type BeijingHome struct {
name string
}
//-----------開始創(chuàng)建方法method-----
func (info BeijingHome)Show(){
fmt.Println("Show()--->info.name:\t", info.name)
}
func (info BeijingHome)Name() string{
return info.name
}
func main() {
a := BeijingHome{"yihuyuan"}
fmt.Println("name:\t", a.Name())
a.Show()
//------下面演示一下,上面理論中說的---復(fù)制品的問題----
b := a
b.name = "lenovo" //修改后,并沒有修改a里的值
b.Show()
Disconnect(a)
Disconnect2(a)
}
//設(shè)計(jì)一個(gè)簡(jiǎn)單的類型斷言
func Disconnect(home HOME){
if pc, ok := home.(BeijingHome); ok{
fmt.Println("Disconnected:\t", pc.name)
return
}
fmt.Println("Unknown decive.")
}
//設(shè)計(jì)一個(gè)簡(jiǎn)單的類型斷言
//傳入的參數(shù),是,空接口
//實(shí)際上,對(duì)于傳入的參數(shù),就沒有限制了
func Disconnect2(home interface{}){
//對(duì)Disconnect()方法,進(jìn)行改造,
//因?yàn)?,傳入的參?shù)是頂層,相當(dāng)于Java里的Object,沒有任何限制
//類型,需要自己判斷
switch v := home.(type) {
case BeijingHome:
fmt.Println("Disconnected:\t", v.name)
default:
fmt.Println("Unknown decive.")
}
}
//不同接口之間的轉(zhuǎn)換,類似于Java中的向上轉(zhuǎn)型,或者向下轉(zhuǎn)型
//就是說,有兩個(gè)接口A, B
//其中,A接口里,嵌入了B
//那么A接口可以轉(zhuǎn)換成B接口,但是,B接口不能轉(zhuǎn)換成A接口,因?yàn)?//A接口里,可能包含B接口里沒有的方法
//也就是說,多的可以向少的轉(zhuǎn)換,反之不可。
package main
import "fmt"
type USB2 interface {
Name() string
Connecter
}
type Connecter interface {
Connect()
}
type PcConnecter struct {
name string
}
func (pcConnecter PcConnecter)Name() string {
return pcConnecter.name
}
func(pcConnecter PcConnecter)Connect() {
fmt.Println("Connected:\t", pcConnecter.name)
}
func main() {
pc := PcConnecter{"appleConnector"}
var a Connecter
//將USE2 類型,強(qiáng)制 轉(zhuǎn)換成了Connecter類型
a = Connecter(pc)
a.Connect()
//------驗(yàn)證----只有當(dāng)接口存儲(chǔ)的類型和對(duì)象都為nil時(shí),接口才等于nil
//聲明一個(gè)空接口, 也沒有賦值,就是nil
var aa interface{}
fmt.Println( aa == nil) // aa 本身就是一個(gè)nil,啥也沒存
//變量p, 是一個(gè)指向int類型的指針
//直接初始化為nil
var p *int = nil
aa = p //aa 指向p
fmt.Println( aa == nil)
}
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。
成都創(chuàng)新互聯(lián)服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過10年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行成都網(wǎng)站制作、做網(wǎng)站、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。