Golang interface{}的具體使用
一、什么是 interface{}?
在 Go 語言中,interface{}
是一種空接口(empty interface),它表示任意類型。因為它沒有定義任何方法,所以 所有類型都實現了它。
定義形式:
interface{}
等價于:
type interface{} interface {}
二、interface{} 有什么特別的?
? 特點:
所有類型都實現了
interface{}
。可以用來存儲任意類型的值。
是 Go 的萬能類型容器,類似于其他語言里的
Object
或any
。
三、使用示例
1. 存儲任意類型的值:
func printAnything(v interface{}) { fmt.Println("值是:", v) } ? func main() { printAnything(123) printAnything("hello") printAnything([]int{1, 2, 3}) }
輸出:
值是:123
值是:hello
值是:[1 2 3]
四、底層原理:interface{} 是怎么存值的?
Go 編譯器將 interface{}
實際存儲為兩部分:
type eface struct { _type *_type // 真實類型信息 data unsafe.Pointer // 指向實際數據的指針 }
比如:
var a interface{} = 123
這時候:
_type
:指向int
的類型描述符;data
:指向 123 這個 int 的值。
五、怎么取出 interface{} 中的值?
1. 類型斷言(Type Assertion):
var a interface{} = "hello" ? str, ok := a.(string) if ok { fmt.Println("轉換成功:", str) } else { fmt.Println("轉換失敗") }
2. 使用類型分支(Type Switch):
var a interface{} = 3.14 ? switch v := a.(type) { case int: fmt.Println("是 int:", v) case float64: fmt.Println("是 float64:", v) case string: fmt.Println("是 string:", v) default: fmt.Println("未知類型") }
六、常見使用場景
場景 | 描述 |
---|---|
JSON 解析 | map[string]interface{} 可以存儲任意結構 |
fmt.Println | 接收的是 ...interface{} 參數 |
任意類型傳參 | 寫通用工具函數,允許接收任意類型 |
空值或未知類型變量 | 當不知道變量類型時,先存為 interface{} |
七、注意事項
interface{}
存進去什么類型,取出來的時候必須斷言正確,否則運行時報錯。interface{}
本身不能直接做加減乘除等運算,必須先類型斷言。不等于 JavaScript 的
any
,Go 仍然是強類型語言,類型斷言很重要。interface{}
不能直接比較,除非內部類型支持==
。
八、面試??紗柎?nbsp;
Q:interface{} 是不是萬能的?
A:它可以存儲任何類型的值,但你不能隨便操作這些值,除非你知道它的真實類型,并且使用類型斷言來還原它。
Q:interface{} 和 interface 的區(qū)別?
A:interface{}
是一種接口類型,沒有定義任何方法;而普通的接口比如 Writer interface { Write(p []byte) (n int, err error) }
定義了方法,只有實現這些方法的類型才能賦值給該接口。
九、總結一句話:
interface{}
是 Go 中可以表示任意類型的“空接口”,是實現泛型編程的基礎工具之一。
到此這篇關于Golang interface{}的具體使用的文章就介紹到這了,更多相關Golang interface{}內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
以go為例探究beyla從環(huán)境變量BEYLA_OPEN_PORT發(fā)現進程原理
這篇文章主要為大家介紹了以golang進程為例,研究beyla從環(huán)境變量BEYLA_OPEN_PORT(即通過端口)發(fā)現進程的原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12我放棄Python轉Go語言的9大理由(附優(yōu)秀書籍推薦)
這篇文章主要給大家介紹了關于我放棄Python轉Go語言的9大理由,以及給大家推薦了6本優(yōu)秀的go語言書籍,對同樣想學習golang的朋友們具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-10-10