在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是空接口?空接口代碼示例

馬哥Linux運(yùn)維 ? 來源:cnblogs ? 2024-04-30 12:59 ? 次閱讀

接口

空接口是指沒有定義任何接口方法的接口。沒有定義任何接口方法,意味著Go中的任意對象都可以實(shí)現(xiàn)空接口(因?yàn)闆]方法需要實(shí)現(xiàn)),任意對象都可以保存到空接口實(shí)例變量中。

空接口的定義方式:

1

2

type empty_int interface {

}

通常會簡寫為type empty_int interface{}。

更常見的,會直接使用interface{}作為一種類型,表示空接口。例如:

1

2

// 聲明一個(gè)空接口實(shí)例

var i interface{}

再比如函數(shù)使用空接口類型參數(shù):

func myfunc(i interface{})

在Go中很多地方都使用空接口類型的參數(shù),用的最多的fmt中的Print類方法:

1

2

$ go doc fmt Println

func Println(a 。..interface{}) (n int, err error)

空接口數(shù)據(jù)結(jié)構(gòu)

可以定義一個(gè)空接口類型的array、slice、map、struct等,這樣它們就可以用來存放任意類型的對象,因?yàn)槿我忸愋投紝?shí)現(xiàn)了空接口。

例如,創(chuàng)建一個(gè)空接口的slice:

1

2

3

4

5

6

7

8

9

10

11

12

13

package main

import “fmt”

func main() {

any := make([]interface{}, 5)

any[0] = 11

any[1] = “hello world”

any[2] = []int{11, 22, 33, 44}

for _, value := range any {

fmt.Println(value)

}

}

輸出結(jié)果:

1

2

3

4

5

11

hello world

[11 22 33 44]

《nil》

《nil》

顯然,通過空接口類型,Go也能像其它動態(tài)語言一樣,在數(shù)據(jù)結(jié)構(gòu)中存儲任意類型的數(shù)據(jù)。

再比如,某個(gè)struct中,如果有一個(gè)字段想存儲任意類型的數(shù)據(jù),就可以將這個(gè)字段的類型設(shè)置為空接口:

1

2

3

4

type my_struct struct {

anything interface{}

anythings []interface{}

}

拷貝數(shù)據(jù)結(jié)構(gòu)到空接口數(shù)據(jù)結(jié)構(gòu)

前面解釋了任意類型的對象都能賦值給空接口實(shí)例。

1

2

3

var any interface{}

any = “hello world”

any = 11

空接口是一種接口,它是一種指針類型的數(shù)據(jù)類型,雖然不嚴(yán)謹(jǐn),但它確實(shí)保存了兩個(gè)指針,一個(gè)是對象的類型(或iTable),一個(gè)是對象的值。所以上面的賦值過程是讓空接口any保存各個(gè)數(shù)據(jù)對象的類型和對象的值。

換一種角度考慮,空接口有自己的內(nèi)存布局方式:兩個(gè)指針,占用兩個(gè)機(jī)器字長。

Golang給的一個(gè)經(jīng)典的示例:將某個(gè)slice中的數(shù)據(jù)拷貝到空接口slice中將報(bào)錯(cuò)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package main

import “fmt”

func main() {

testSlice := []int{11,22,33,44}

// 成功拷貝

var newSlice []int

newSlice = testSlice

fmt.Println(newSlice)

// 拷貝失敗

var any []interface{}

any = testSlice

fmt.Println(any)

}

這是因?yàn)槊總€(gè)空接口的內(nèi)存布局都占用兩個(gè)機(jī)器字長的內(nèi)容。對于長度為N的空接口slice來說,它的每個(gè)元素都是以2機(jī)器字長為單元的連續(xù)空間,共占用N*2個(gè)機(jī)器字長的空間。

而普通的slice,例如上面的testSlice,它的每個(gè)元素是int類型的,int類型的內(nèi)存布局和空接口不一樣。

這些對象的內(nèi)存布局在編譯期間就已經(jīng)確定好了,所以沒法直接將不同內(nèi)存布局的數(shù)據(jù)結(jié)構(gòu)進(jìn)行拷貝。

要想完成期待的拷貝,可以使用for-range的方式,將testSlice中的每個(gè)元素賦值給空接口slice的空接口元素:也就是一個(gè)個(gè)的空接口實(shí)例。

1

2

3

4

var any []interface{}

for _,value := range testSlice{

any = append(any,value)

}

這樣,空接口Slice中的每個(gè)空接口實(shí)例都指向更底層的各個(gè)數(shù)據(jù)對象。而不是像前面錯(cuò)誤的拷貝方式:每個(gè)空接口元素想要當(dāng)作這些數(shù)據(jù)對象。

不僅空接口的Slice如此,其它包含空接口的數(shù)據(jù)結(jié)構(gòu),也都類似。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8861

    瀏覽量

    152836
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13747

原文標(biāo)題:空接口

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是的,為什么?

    用STM32CubeMX生成STM32mp135D的USART1,2,3,6代碼初始化是的,參考其他代碼做了初始化操作,可以通過HAL_USART_Transmit接口發(fā)送數(shù)據(jù),但是
    發(fā)表于 03-07 07:48

    消息郵箱發(fā)送消息和非消息產(chǎn)生一樣的效果

    原子哥,我測試消息郵箱時(shí)先定義消息為 SeMbox = OSMboxCreate((void *)0);再按鍵中斷發(fā)送消息為什么發(fā)送 OSMboxPostOpt(SeMbox,(void *)0
    發(fā)表于 05-08 06:36

    時(shí)碼.ppt

    分層時(shí)碼;基于發(fā)射分集的時(shí)碼;單輸入單輸出(SISO)到多輸入多輸出(MIMO);時(shí)碼頻譜效率高,抗平坦衰落;還不適合嚴(yán)重非平坦衰落信道。
    發(fā)表于 06-14 23:07 ?16次下載

    助聽器鋅電池

    助聽器鋅電池 助聽器鋅電池圖
    發(fā)表于 12-16 08:51 ?840次閱讀

    電池問答

    電池問答 問:鋅電池的內(nèi)部結(jié)構(gòu)是怎樣的,它是怎么工作的 電池構(gòu)造: 成
    發(fā)表于 12-16 09:07 ?914次閱讀

    分光交換(SDPS),分光交換(SDPS)是什么意思

    分光交換(SDPS),分光交換(SDPS)是什么意思 分光交換技術(shù)就是在空間域上對光信號進(jìn)行交換,其基本原理是將光交換元件組成門陣列開關(guān),并適
    發(fā)表于 03-20 10:18 ?3099次閱讀

    分多址(SDMA),分多址(SDMA)是什么意思

    分多址(SDMA),分多址(SDMA)是什么意思 分多址(SDMA):這種技術(shù)是利用空間分割構(gòu)成不同的信道。舉例來說,在一顆衛(wèi)星上使用
    發(fā)表于 04-03 13:40 ?3634次閱讀

    STM32F091片使用System Bootloader下載

    STM32F091片使用System Bootloader下載代碼
    發(fā)表于 12-07 18:17 ?0次下載

    STM32F091片編程后怎樣直接運(yùn)行用戶代碼

    STM32F091片編程后不能直接運(yùn)行用戶代碼的分析與解決。
    的頭像 發(fā)表于 08-31 14:16 ?7513次閱讀
    STM32F091<b class='flag-5'>空</b>片編程后怎樣直接運(yùn)行用戶<b class='flag-5'>代碼</b>

    API-Shop-OCR-營業(yè)執(zhí)照識別API接口Python調(diào)用示例代碼說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是API-Shop-OCR-營業(yè)執(zhí)照識別API接口Python調(diào)用示例代碼說明
    發(fā)表于 01-10 11:48 ?6次下載
    API-Shop-OCR-營業(yè)執(zhí)照識別API<b class='flag-5'>接口</b>Python調(diào)用<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>說明

    預(yù)器是什么,有哪些作用

    預(yù)器是電廠鍋爐中的重要設(shè)備。不同的發(fā)電機(jī)組,預(yù)器的規(guī)格類別也是有所差異的。本篇內(nèi)容泓江智造就一起和大家聊聊關(guān)于預(yù)器相關(guān)的問題。
    發(fā)表于 07-16 15:24 ?2w次閱讀

    圖形引擎服務(wù)場景化接口示例代碼

    簡介 圖形引擎服務(wù)場景化接口示例代碼演示了如何調(diào)用SceneView、ARView和FaceView進(jìn)行圖形渲染。 開發(fā)準(zhǔn)備 1.檢查Android Studio開發(fā)環(huán)境是否就緒。使用Android
    發(fā)表于 03-23 10:57 ?1次下載

    MPC82系列MCU的SPI(串行外圍接口)示例代碼

    MPC82系列MCU的SPI(串行外圍接口)示例代碼
    發(fā)表于 06-30 17:35 ?0次下載
    MPC82系列MCU的SPI(串行外圍<b class='flag-5'>接口</b>)<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    python如何定義二維數(shù)組

    和列的數(shù)量,并將它們初始化為0。然后,可以使用一個(gè)for循環(huán)來逐行創(chuàng)建一個(gè)的一維列表,并使用另一個(gè)for循環(huán)來向的二維列表中添加這些一維列表。 下面是一個(gè)示例代碼,創(chuàng)建一個(gè)3行4列
    的頭像 發(fā)表于 11-21 15:12 ?2101次閱讀

    什么是芯光纖?為什么需要芯光纖?

    芯光纖(Hollow-core fiber)—— 一種新型傳輸媒介 。
    的頭像 發(fā)表于 12-27 09:22 ?1184次閱讀
    主站蜘蛛池模板: 亚洲精品视频区 | 老师受年下高h男 | 可以免费播放的在线视频 | 色香色香欲天天天影视综合网 | 极品色天使在线婷婷天堂亚洲 | 高清性色生活片欧美在线 | 五月sese| 在线视频免费播放 | 爱爱帝国亚洲一区二区三区 | 手机看片久久青草福利盒子 | 四虎免费久久影院 | 五月欧美激激激综合网色播 | 欧美一级做一级做片性十三 | 夜夜骑日日射 | 韩国一区二区三区视频 | 午夜视频在线网站 | 偷偷操不一样的久久 | 免费欧美黄色 | 久久久久久免费观看 | 人人成人免费公开视频 | 日韩一级片视频 | 日韩欧美卡通动漫在线观看 | 国产一级一级片 | 怡红院免费va男人的天堂 | 日韩欧美印度一级毛片 | 正在播放91大神调教偷偷 | 综合色综合 | 婷婷色5月| 夜夜操夜夜摸 | 爱爱欧美 | 亚洲福利二区 | 爽死你个放荡粗暴小淫视频 | 4虎影院最近地址 | 国产成人精品一区二区三区 | 免费一区二区 | 成年视频xxxxx免费播放软件 | 欧美性猛交aa一级 | 亚洲高清资源 | 亚洲天堂免费看 | 午夜在线视频免费观看 | 天天干天天天天 |