欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang interface{}的具體使用

 更新時(shí)間:2025年05月23日 11:15:18   作者:gopher.guo  
interface{}是Go中可以表示任意類型的空接口,本文主要介紹了Golang interface{}的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下

一、什么是 interface{}?

在 Go 語言中,interface{} 是一種空接口(empty interface),它表示任意類型。因?yàn)樗鼪]有定義任何方法,所以 所有類型都實(shí)現(xiàn)了它。

定義形式:

interface{}

等價(jià)于:

type interface{} interface {}

二、interface{} 有什么特別的?

? 特點(diǎn):

  • 所有類型都實(shí)現(xiàn)了 interface{}。

  • 可以用來存儲(chǔ)任意類型的值。

  • 是 Go 的萬能類型容器,類似于其他語言里的 Object 或 any。

三、使用示例

1. 存儲(chǔ)任意類型的值:

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{} 實(shí)際存儲(chǔ)為兩部分:

type eface struct {
    _type *_type      // 真實(shí)類型信息
    data  unsafe.Pointer  // 指向?qū)嶋H數(shù)據(jù)的指針
}

比如:

var a interface{} = 123

這時(shí)候:

  • _type:指向 int 的類型描述符;

  • data:指向 123 這個(gè) int 的值。

五、怎么取出 interface{} 中的值?

1. 類型斷言(Type Assertion):

var a interface{} = "hello"
?
str, ok := a.(string)
if ok {
    fmt.Println("轉(zhuǎn)換成功:", str)
} else {
    fmt.Println("轉(zhuǎn)換失敗")
}

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("未知類型")
}

六、常見使用場(chǎng)景

場(chǎng)景描述
JSON 解析map[string]interface{} 可以存儲(chǔ)任意結(jié)構(gòu)
fmt.Println接收的是 ...interface{} 參數(shù)
任意類型傳參寫通用工具函數(shù),允許接收任意類型
空值或未知類型變量當(dāng)不知道變量類型時(shí),先存為 interface{}

七、注意事項(xiàng) 

  • interface{} 存進(jìn)去什么類型,取出來的時(shí)候必須斷言正確,否則運(yùn)行時(shí)報(bào)錯(cuò)。

  • interface{} 本身不能直接做加減乘除等運(yùn)算,必須先類型斷言。

  • 不等于 JavaScript 的 any,Go 仍然是強(qiáng)類型語言,類型斷言很重要。

  • interface{} 不能直接比較,除非內(nèi)部類型支持 ==。

八、面試??紗柎?nbsp;

Q:interface{} 是不是萬能的?

A:它可以存儲(chǔ)任何類型的值,但你不能隨便操作這些值,除非你知道它的真實(shí)類型,并且使用類型斷言來還原它。

Q:interface{} 和 interface 的區(qū)別?

A:interface{} 是一種接口類型,沒有定義任何方法;而普通的接口比如 Writer interface { Write(p []byte) (n int, err error) } 定義了方法,只有實(shí)現(xiàn)這些方法的類型才能賦值給該接口。

九、總結(jié)一句話:

interface{} 是 Go 中可以表示任意類型的“空接口”,是實(shí)現(xiàn)泛型編程的基礎(chǔ)工具之一。

到此這篇關(guān)于Golang interface{}的具體使用的文章就介紹到這了,更多相關(guān)Golang interface{}內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang批量執(zhí)行任務(wù)的通用模板分享

    golang批量執(zhí)行任務(wù)的通用模板分享

    這篇文章主要為大家詳細(xì)介紹了golang實(shí)現(xiàn)批量執(zhí)行任務(wù)的通用模板,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-11-11
  • 關(guān)于Go語言中特有的設(shè)計(jì)模式與實(shí)現(xiàn)方式講解

    關(guān)于Go語言中特有的設(shè)計(jì)模式與實(shí)現(xiàn)方式講解

    雖然Go語言沒有像其他語言那樣明確的設(shè)計(jì)模式,但在實(shí)踐中,開發(fā)者們?nèi)匀话l(fā)現(xiàn)了一些在Go語言中特別適用的設(shè)計(jì)模式和實(shí)現(xiàn)方式,本文就來和大家一一進(jìn)行講解
    2023-05-05
  • 以go為例探究beyla從環(huán)境變量BEYLA_OPEN_PORT發(fā)現(xiàn)進(jìn)程原理

    以go為例探究beyla從環(huán)境變量BEYLA_OPEN_PORT發(fā)現(xiàn)進(jìn)程原理

    這篇文章主要為大家介紹了以golang進(jìn)程為例,研究beyla從環(huán)境變量BEYLA_OPEN_PORT(即通過端口)發(fā)現(xiàn)進(jìn)程的原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串

    GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串

    字符串在Go語言中以原生數(shù)據(jù)類型出現(xiàn),使用字符串就像使用其他原生數(shù)據(jù)類型(int、bool、float32、float64 等)一樣,下面這篇文章主要給大家介紹了關(guān)于GO語言入門學(xué)習(xí)之基本數(shù)據(jù)類型字符串的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法

    go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法

    這篇文章主要介紹了go語言通過反射獲取和設(shè)置結(jié)構(gòu)體字段值的方法,實(shí)例分析了Go語言反射的使用技巧,需要的朋友可以參考下
    2015-03-03
  • Go語言基于Goroutine的超時(shí)控制方案設(shè)計(jì)與實(shí)踐

    Go語言基于Goroutine的超時(shí)控制方案設(shè)計(jì)與實(shí)踐

    Go語言因其并發(fā)特性而備受青睞,尤其是goroutine和channel的組合,像一對(duì)默契的搭檔,為開發(fā)者提供了輕量、高效的并發(fā)工具,下面我們來看看基于goroutine的超時(shí)控制方案吧
    2025-05-05
  • Go重寫http請(qǐng)求重定向的方法

    Go重寫http請(qǐng)求重定向的方法

    當(dāng)使用Go語言進(jìn)行 HTTP 請(qǐng)求時(shí),默認(rèn)情況下,http.Client 會(huì)自動(dòng)處理服務(wù)器返回的重定向響應(yīng)(3xx 狀態(tài)碼),本文將詳細(xì)介紹如何在 Go 中實(shí)現(xiàn)禁止 HTTP 請(qǐng)求的重定向、限制重定向次數(shù)以及添加自定義重定向策略,需要的朋友可以參考下
    2024-08-08
  • 手把手帶你走進(jìn)Go語言之條件表達(dá)式

    手把手帶你走進(jìn)Go語言之條件表達(dá)式

    條件表達(dá)式由條件運(yùn)算符構(gòu)成,并常用條件表達(dá)式構(gòu)成一個(gè)賦值語句,本文給大家介紹了在Go語言中條件表達(dá)式的具體用法,講述的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值
    2021-09-09
  • 我放棄Python轉(zhuǎn)Go語言的9大理由(附優(yōu)秀書籍推薦)

    我放棄Python轉(zhuǎn)Go語言的9大理由(附優(yōu)秀書籍推薦)

    這篇文章主要給大家介紹了關(guān)于我放棄Python轉(zhuǎn)Go語言的9大理由,以及給大家推薦了6本優(yōu)秀的go語言書籍,對(duì)同樣想學(xué)習(xí)golang的朋友們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • golang中sync.Mutex的實(shí)現(xiàn)方法

    golang中sync.Mutex的實(shí)現(xiàn)方法

    本文主要介紹了golang中sync.Mutex的實(shí)現(xiàn)方法,mutex?主要有兩個(gè)?method:?Lock()?和?Unlock(),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論