日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang——接口、多态、接口继承与转换、空接口、类型断言

發布時間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang——接口、多态、接口继承与转换、空接口、类型断言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 接口是一種規范與標準,只是規定了要做哪些事情。但是具體怎么做,是實現接口的類去做的,接口只是把所有具有共性的方法定義在一起。
  • 接口存在的意義就是用來定義規范,用來做功能的拓展
  • 接口最大的好處是可以實現多態
  • 在Golang中只要接口中的方法和結構體重的一樣,就會認為這么結構體實現了這個接口的方法
  • 在這里還是要吐槽一下,Go的語法是真的丑,如果你是Java轉過來的,就會發現,垃圾的一批

接口定義及調用:

定義格式:

tepe 接口名 interface{方法 返回值類型 }

調用格式1:

對象名.方法名

調用格式2:這種方式必須實現接口中聲明的所有方法

通過接口變量調用

演示:

func main() {// 對象名.方法名var stu Studentstu.Hello() // Student類實現了接口的Hello方法var tea Teachertea.Hello() // Teacher類實現了接口的Hello方法// 通過接口變量調用,如果接口中有兩個方法,但是只實現了一個,就會報錯,必須全部實現var testInterface TestInterfacetestInterface = &stutestInterface.Hello() // Student類實現了接口的Hello方法testInterface = &teatestInterface.Hello() // Teacher類實現了接口的Hello方法 }type Student struct{}type Teacher struct{}type TestInterface interface {Hello() }func (student *Student) Hello() {fmt.Println("Student類實現了接口的Hello方法") }func (teacher *Teacher) Hello() {fmt.Println("Teacher類實現了接口的Hello方法") }

多態:

  • 多態是指同一行為,具有多個不同表現形式
  • 多態是一同一個接口,使用不同的實例執行不同的操作
  • 多態是除封裝、繼承之后面向對象的第三大特征。
  • 多態是出現在接口關系中的(只能是接口)
  • 舉例:win電腦和Mac都是電腦(接口),但是mac只能辦公用,win可以辦公可以玩游戲,不同類型的電腦具有不同的特征,就是多態

多態的實現:

func 函數名 (參數 接口類型){}

演示:

func main() {var stu Studentvar tea Teacher// 多態Polymorphic(&stu) //Student類實現了接口的Hello方法Polymorphic(&tea) // Teacher類實現了接口的Hello方法 }type Student struct{}type Teacher struct{}type TestInterface interface {Hello() }func (student *Student) Hello() {fmt.Println("Student類實現了接口的Hello方法") }func (teacher *Teacher) Hello() {fmt.Println("Teacher類實現了接口的Hello方法") }func Polymorphic(polymorphic TestInterface) {polymorphic.Hello() }

接口的繼承與轉換:

接口的繼承和普通繼承是一樣的,直接寫接口名就可以了

演示:

func main() {var stu Studentvar test02 TestInterface02test02 = &stutest02.Hello()test02.HelloHello() // 可以調用所繼承接口中的方法var test TestInterfacetest = test02test.Hello() }type Student struct{}type Teacher struct{}type TestInterface interface {Hello() }type TestInterface02 interface {TestInterface // 繼承第一個接口HelloHello() }func (student *Student) Hello() {fmt.Println("Hello") }func (student *Student) HelloHello() {fmt.Println("HelloHello") }

空接口定義及使用:

空接口(interface {})不包含任何的方法,正因為如此,所有的類型都實現了空接口,因此空接口可以存儲任意類型的數值

演示:

func main() {// 定義空接口的切片,由于是空接口所以可以存儲任意類型的數據var s []interface{}s = append(s, 1, 2, 3, "字符串", 1.1, true)fmt.Println(s) }

類型斷言:

通過類型斷言,可以判斷空接口中存儲的數據類型

定義格式:

value,ok:=m.(T)
  • value:表示變量m的值
  • ok:表示布爾類型變量,如果斷言成功為true,否則為false
  • m:表示空接口類型的變量
  • T:表示斷言的類型
  • 如果m

演示:

func main() {var i interface{}i = 123// 如果i是int類型就會把結果賦值給ok,把數據(123)賦值給valuevalue, ok := i.(int)// 如果是123就會打印斷言成功,不是123就會打印斷言失敗if ok {fmt.Println("斷言成功:", value)} else {fmt.Println("斷言失敗")} }

總結

以上是生活随笔為你收集整理的Golang——接口、多态、接口继承与转换、空接口、类型断言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。