深入理解go中interface機(jī)制
前言
go的interface是一組method的集合,不關(guān)心屬性(數(shù)據(jù)),只關(guān)心行為(方法)。具體使用中你可以自定義自己的 struct,并提供特定的 interface 里面的 method 就可以把它當(dāng)成 interface 來使用
interface使用
package main import "fmt" type Speaker interface { Say() string } type User struct { id int64 `UserService` name string } func (user *User) Say() string { return "aaaa" } func (user *User) Say1() string { return "aaaa1" } func main() { var user = &User{ 1, "aa", } var s Speaker s = user fmt.Println(s.Say()) } func speak(s Speaker) { fmt.Println(s.Say()) }
也可以定義多個(gè)interface
package main import "fmt" type Speaker interface { Say() string } type Speaker1 interface { Say1() string } type User struct { id int64 `UserService` name string } func (user *User) Say() string { return "aaaa" } func (user *User) Say1() string { return "aaaa1" } func main() { var user = &User{ 1, "aa", } var ( s Speaker s1 Speaker1 ) s = user s1 = user fmt.Println(s.Say()) fmt.Println(s1.Say1()) } func speak(s Speaker) { fmt.Println(s.Say()) }
也可以使用接口的組合
package main import "fmt" type Speaker interface { Speak() string } type Mover interface { Move() string } type Hello interface { Speaker Mover } type User struct { Name string } func (a User) Speak() string { return "aaa" } func (a User) Move() string { return "bbb" } func main() { user := User{Name: "aa"} showRobot(&user) } func showRobot(r Hello) { fmt.Println("Speak:", r.Speak()) fmt.Println("Move:", r.Move()) }
單值類型斷言
package main import "fmt" func main() { var i interface{} = "Hello, World!" // 使用單值類型斷言 s := i.(string) fmt.Println(s) // 輸出: Hello, World! // 如果類型不匹配,會(huì)拋出 panic n := i.(int) fmt.Println(n) }
結(jié)果為
類型判斷
package main import "fmt" func describe(i interface{}) { switch v := i.(type) { case int: fmt.Println("整型: ", v) case string: fmt.Println("字符串:", v) case bool: fmt.Println("布爾值:", v) default: fmt.Println("未知類型: ", v) } } func main() { describe(66) describe("aa") }
輸出結(jié)果為
總結(jié)
interface
是 Go 語言中實(shí)現(xiàn)多態(tài)性和代碼復(fù)用的重要機(jī)制,能夠讓你編寫更加通用和靈活的代碼,可以利用它更好編碼
到此這篇關(guān)于深入理解go中interface機(jī)制的文章就介紹到這了,更多相關(guān)go interface機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換)
這篇文章主要介紹了go 類型轉(zhuǎn)換方式(interface 類型的轉(zhuǎn)換),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05golang基礎(chǔ)之waitgroup用法以及使用要點(diǎn)
WaitGroup是Golang并發(fā)的兩種方式之一,一個(gè)是Channel,另一個(gè)是WaitGroup,下面這篇文章主要給大家介紹了關(guān)于golang基礎(chǔ)之waitgroup用法以及使用要點(diǎn)的相關(guān)資料,需要的朋友可以參考下2023-01-01Golang中文字符串截取函數(shù)實(shí)現(xiàn)原理
在golang中可以通過切片截取一個(gè)數(shù)組或字符串,但是當(dāng)截取的字符串是中文時(shí),可能會(huì)出現(xiàn)問題,下面我們來自定義個(gè)函數(shù)解決Golang中文字符串截取問題2018-03-03Go語言并發(fā)編程之互斥鎖Mutex和讀寫鎖RWMutex
Go 語言中提供了很多同步工具,本文將介紹互斥鎖Mutex和讀寫鎖RWMutex的使用方法,想要具體了解的小伙伴,請參考下面文章詳細(xì)內(nèi)容,希望對你有所幫助2021-10-10Go?+?Gin實(shí)現(xiàn)雙Token管理員登錄的示例代碼
本文主要介紹了Go?+?Gin實(shí)現(xiàn)雙Token管理員登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07使用Go語言實(shí)現(xiàn)benchmark解析器
這篇文章主要為大家詳細(xì)介紹了如何使用Go語言實(shí)現(xiàn)benchmark解析器并實(shí)現(xiàn)及Web UI 數(shù)據(jù)可視化,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2025-04-04