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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

馬哥Linux運維 ? 來源:cnblogs ? 2024-04-30 12:59 ? 次閱讀

接口

空接口是指沒有定義任何接口方法的接口。沒有定義任何接口方法,意味著Go中的任意對象都可以實現空接口(因為沒方法需要實現),任意對象都可以保存到空接口實例變量中。

空接口的定義方式:

1

2

type empty_int interface {

}

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

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

1

2

// 聲明一個空接口實例

var i interface{}

再比如函數使用空接口類型參數

func myfunc(i interface{})

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

1

2

$ go doc fmt Println

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

空接口數據結構

可以定義一個空接口類型的array、slice、map、struct等,這樣它們就可以用來存放任意類型的對象,因為任意類型都實現了空接口。

例如,創建一個空接口的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)

}

}

輸出結果:

1

2

3

4

5

11

hello world

[11 22 33 44]

《nil》

《nil》

顯然,通過空接口類型,Go也能像其它動態語言一樣,在數據結構中存儲任意類型的數據。

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

1

2

3

4

type my_struct struct {

anything interface{}

anythings []interface{}

}

拷貝數據結構到空接口數據結構

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

1

2

3

var any interface{}

any = “hello world”

any = 11

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

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

Golang給的一個經典的示例:將某個slice中的數據拷貝到空接口slice中將報錯。

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)

}

這是因為每個空接口的內存布局都占用兩個機器字長的內容。對于長度為N的空接口slice來說,它的每個元素都是以2機器字長為單元的連續空間,共占用N*2個機器字長的空間。

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

這些對象的內存布局在編譯期間就已經確定好了,所以沒法直接將不同內存布局的數據結構進行拷貝。

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

1

2

3

4

var any []interface{}

for _,value := range testSlice{

any = append(any,value)

}

這樣,空接口Slice中的每個空接口實例都指向更底層的各個數據對象。而不是像前面錯誤的拷貝方式:每個空接口元素想要當作這些數據對象。

不僅空接口的Slice如此,其它包含空接口的數據結構,也都類似。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8694

    瀏覽量

    151925
  • 數據類型
    +關注

    關注

    0

    文章

    236

    瀏覽量

    13663

原文標題:空接口

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    消息郵箱發送消息和非消息產生一樣的效果

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

    時碼.ppt

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

    助聽器鋅電池

    助聽器鋅電池 助聽器鋅電池圖
    發表于 12-16 08:51 ?799次閱讀

    電池問答

    電池問答 問:鋅電池的內部結構是怎樣的,它是怎么工作的 電池構造: 成
    發表于 12-16 09:07 ?888次閱讀

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

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

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

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

    STM32F091片使用System Bootloader下載

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

    STM32F091片編程后怎樣直接運行用戶代碼

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

    基于預器跳閘后的處理

    預器是鍋爐的重要輔機,機組運行中一臺預器跳閘若未及時處理或處理不當,可能會造成鍋爐MFT或空氣預熱器變形卡澀等,對機組安全運行形成巨大威脅。預器入口煙氣溫度高極易引起預器膨脹不
    發表于 02-05 14:28 ?0次下載

    API-Shop-OCR-營業執照識別API接口Python調用示例代碼說明

    本文檔的主要內容詳細介紹的是API-Shop-OCR-營業執照識別API接口Python調用示例代碼說明
    發表于 01-10 11:48 ?6次下載
    API-Shop-OCR-營業執照識別API<b class='flag-5'>接口</b>Python調用<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>說明

    預器是什么,有哪些作用

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

    圖形引擎服務場景化接口示例代碼

    簡介 圖形引擎服務場景化接口示例代碼演示了如何調用SceneView、ARView和FaceView進行圖形渲染。 開發準備 1.檢查Android Studio開發環境是否就緒。使用Android
    發表于 03-23 10:57 ?1次下載

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

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

    python如何定義二維數組

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

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

    芯光纖(Hollow-core fiber)—— 一種新型傳輸媒介 。
    的頭像 發表于 12-27 09:22 ?1038次閱讀
    主站蜘蛛池模板: 人与牲动交bbbbxxxx | 男女交性视频免费播放视频 | 影音先锋色偷偷米奇四色 | 国产精品 色 | 成年啪啪网站免费播放看 | 欧美黄色高清 | 一区二区三区午夜 | 久久久久久综合 | 97综合 | 你懂在线 | 乱操视频 | 午夜欧美在线 | 日不卡| 极品国产一区二区三区 | 91大神成人偷拍在线观看 | 色姑娘天天干 | 激情综合五月婷婷 | 伊人久久大香线蕉观看 | www.xxx.日本 | 久久天天躁狠狠躁夜夜躁 | 亚洲 成人 欧美 自拍 | 全黄h全肉边做边吃奶在线观看 | 欧美日韩国产成人精品 | 永久视频免费 | 免费看黄色小视频 | 日本www.色| 毛片天天看 | 97超频国产在线公开免费视频 | 48pao强力打造免费基地 | 大又大又粗又爽又黄毛片女人 | 男女交性视频免费播放视频 | 4虎影院在线观看 | 日本高清视频色视频kk266 | 国产美女特级嫩嫩嫩bbb | 俺来也俺来也天天夜夜视频 | 日本口工禁漫画无遮挡全彩 | 在线观看精品视频看看播放 | a视频网站| 女人扒开腿让男人桶到爽 | 亚洲成年 | 天天躁日日躁成人字幕aⅴ 天天躁夜夜躁 |