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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

golang中的接口实现(二)

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang中的接口实现(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指針類型 vs 值類型實現接口

package mainimport ("fmt" )// 定義接口 type Describer interface {Describe() }// 定義一個類 type Person struct {name stringage int }// 值類型的Person 實現了 Describe 方法 func (p Person) Describe() {fmt.Printf("%s is %d years old\n", p.name, p.age) }// 定義一個類 type Address struct {province string // 省city string // 市 }// 指針類型的 Address 實現了 Describe方法 func (a *Address) Describe() {fmt.Printf("%s省 %s市 \n", a.province, a.city)fmt.Println("35", &a) }func main() {var d1 Describer // 接口類型變量p1 := Person{"Sheldon", 18}d1 = p1 //值類型d1.Describe()p2 := Person{"Leonard", 20}d1 = &p2 // 指針類型d1.Describe()var d2 Describera1 := Address{"山東", "臨沂"}//d2 = a1 // tip ①d2 = &a1d2.Describe()a1.Describe()return// ① &a1(*Address) 實現了 Describe 方法, 而 a1(值類型)沒有實現Describe方法, // 所以只有指針類型的 Address 對象可以轉換為 Describe 接口對象。

實現多個接口

package mainimport "fmt"// 定義接口1 type Animal interface {Eat() }// 定義接口2 type People interface {Talk() }type Man struct {name stringage int } // 實現接口1 func (m Man) Eat() {fmt.Println("男人吃東西") } // 實現接口2 func (m Man)Talk() {fmt.Println("男人講話") }func main() {var sheldon Mansheldon.Eat()sheldon.Talk() }

接口的嵌套

(go 中沒有類似 Java,C# 中的父類這種東西, 但是可以通過嵌入其他接口來創(chuàng)建新的接口.)

type Interface111 interface {Method111() }type Interface222 interface {Method222() int }type EmployeeOperations interface {Interface111Interface222 }type Employee struct { }func (e Employee) Method111() {}func (e Employee) Method222() int {return 18 }func main() {e := Employee{ }var empOp EmployeeOperations = eempOp.Method111() // 大接口對象操作方法var i2 Interface111 = ei2.Method111() // 小接口對象操作方法 }

接口零值

type Interface111 interface {Method111() }func main() {var i1 Interface111if i1 == nil { ①fmt.Printf("i1 is nil and 類型: %T 值: %v\n", i1, i1)// i1 is nil and 類型: <nil> 值: <nil>} else {i1.Method111()} } // ① 使用 nil 接口對象調用方法的話,則程序會 panic, // 因為 nil interface既沒有底層的值也沒有對應的具體類型. 類似于 JAVA 的空指針異常!

轉載于:https://www.cnblogs.com/sweetXiaoma/p/10688018.html

總結

以上是生活随笔為你收集整理的golang中的接口实现(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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