這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Golang最重要的介面,,,,
package mainimport ( "fmt")//interface類型預設是指標/*介面的實現Golang中的介面,不需要顯示的實現。只需要一個變數,含有介面類型中的所有方法,那麼這個變數就實現這個介面因為Golang中沒有implement類似的關鍵字如果一個變數含有了多個interface類型的方法,那麼這個變數就實現了多個介面如果一個變數只含有了1個interface的部分方法,那麼這個變數沒有實現這個介面..一種事物的多種形態,都可以按照統一的介面進行操作*///介面嵌套type ReadWrite interface { Read(b Buffer) bool Write(b Buffer) bool}type Lock interface { Lock() Unlock()}//嵌套,繼承了前面四個方法,File就有6個方法type File interface { ReadWrite Lock Close()}//類型斷言,由於介面是一般類型,不知道具體類型,如果要轉成具體類型可以採用以下方法進行轉換var t intvar x interface{}x=ty,ok=x.(int)//定義People結構體type People struct { name string age int}//定義Test介面type Test interface { //介面有2個方法 Print() Sleep()}//定義structtype Student struct { name string age int score int}//定義Print()方法func (p Student) Print() { fmt.Println("name:", p.name) fmt.Println("age:", p.age) fmt.Println("score", p.score)}//Sleep方法func (p Student) Sleep() { fmt.Println("student sleep")}func (people People) Print() { fmt.Println("name:", people.name) fmt.Println("age:", people.age)}func (p People) Sleep() { fmt.Println("People Sleep")}func main() { var t Test //介面是個地址 fmt.Println(t) var stu Student = Student{ name: "stu1", age: 20, score: 200, } t = stu t.Print() t.Sleep() fmt.Println("t:", t)}
//介面,空介面
package mainimport "fmt"type Carer interface { GetName() string Run() }func main() { var a interface{} //空介面 var b int //具體類型 //空介面可以保持任何類型的變數 a = b // b給a賦值,空介面可以容納任何類型 b=a //這是錯的 fmt.Printf("type of a:%T\n", a) // %T列印類型}
//介面的實現(車,寶馬車)
package mainimport "fmt"type Carer interface { GetName() string Run() DiDi()}type BMW struct { Name string}//得實現介面所有的方法,才算實現了該介面func (p *BMW) GetName() string { return p.Name}//因此還得實現RUN()//指標類型*BMW,也可以寫實值型別 (p BMW)func (p *BMW) Run() { fmt.Printf("%s is running\n", p.Name)}//還得實現DiDi()func (p *BMW) DiDi() { fmt.Printf("%s is didi\n", p.Name)}func main() { var car Carer fmt.Println(car) //var bmw BMW //bmw.Name = "BMW" //寫法2 bmw := &BMW{ Name: "BMW", } car = bmw car.Run()}
寶馬
//Golang中的介面,不需要顯示的實現。只要一個變數,含有介面類型中的所有方法,那麼這個變數就實現了這個介面。
//因此Golang中沒有implement類似的關鍵字
//如果一個變數含有了多個interface類型的方法,那麼這個變數就實現了多個介面
package mainimport "fmt"type Carer interface { GetName() string Run() DiDi()}type Test interface { Hello()}//寶馬車type BMW struct { Name string}//因此還得實現RUN()//得實現介面所有的方法,才算實現了該介面func (p *BMW) GetName() string { return p.Name}//實現介面的Run()func (p *BMW) Run() { fmt.Printf("%s is running\n", p.Name)}//還得實現DiDi()func (p *BMW) DiDi() { fmt.Printf("%s is didi\n", p.Name)}func (p *BMW) Hello() { fmt.Printf("hello,i'm %s \n", p.Name)}//比亞迪type BYD struct { Name string}func (p *BYD) GetName() string { return p.Name}func (p *BYD) Run() { fmt.Printf("%s is running\n", p.Name)}func (p *BYD) DiDi() { fmt.Printf("%s is didi\n", p.Name)}func main() { var car Carer var test Test fmt.Println(car) //var bmw BMW //bmw.Name = "BMW" //寫法2 bmw := &BMW{ Name: "BMW", } car = bmw car.Run() test = bmw test.Hello() byd := &BYD{ Name: "BYD", } car = byd car.Run()}
比亞迪和寶馬