国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Go Slice 里面放 Struct,應該使用指針嗎?

Go Slice 里面放 Struct,應該使用指針嗎?

2022-01-10 23:50云技術趣談 Golang

很多人寫go 也寫了好多年了,但還是對go 的內存結構一無所知,除了內存對齊以外,比如slice 里面到底應該放結構體([]MyStruct)還是結構體指針([]*MyStruct),還是一頭霧水。

Go Slice 里面放 Struct,應該使用指針嗎?

很多人寫go 也寫了好多年了,但還是對go 的內存結構一無所知,除了內存對齊以外,比如slice 里面到底應該放結構體([]MyStruct)還是結構體指針([]*MyStruct),還是一頭霧水。

Go slice 里面放struct 應該使用指針嗎?

我們先通過一個性能測試,看一下這兩種情況下的性能對比:

我們先定義一個結構體:

  1. type MyStruct struct {
  2. A int
  3. B int
  4. }

然后通過go自帶的benchmark測試一下,首先是使用指針的場景:

  1. func BenchmarkSlicePointers(b *testing.B) {
  2. b.ReportAllocs()
  3. for i := 0; i < b.N; i++ {
  4. slice := make([]*MyStruct, 0, 100)
  5. for j := 0; j < 100; j++ {
  6. slice = append(slice, &MyStruct{A: j, B: j + 1})
  7. }
  8. }
  9. }

然后是直接放結構體的場景:

  1. func BenchmarkSliceNoPointers(b *testing.B) {
  2. b.ReportAllocs()
  3. for i := 0; i < b.N; i++ {
  4. slice := make([]MyStruct, 0, 100)
  5. for j := 0; j < 100; j++ {
  6. slice = append(slice, MyStruct{A: j, B: j + 1})
  7. }
  8. }
  9. }

跑一下:

  1. name time/op
  2. SlicePointers-8 2.50μs ± 2%
  3. SliceNoPointers-8 117ns ± 1%
  4. name alloc/op
  5. SlicePointers-8 1.60kB ± 0%
  6. SliceNoPointers-8 0.00B
  7. name allocs/op
  8. SlicePointers-8 100 ± 0%
  9. SliceNoPointers-8 0.00

可以看到使用指針的時候的性能要明顯低于直接使用結構體,原因也很明顯,因為使用指針的時候,切面里面放的是指針,指針在單獨指向一個內存區域,而直接使用結構體則可以節省這部分的開銷。

所以,只有我們需要修改原來數據,必須指針傳遞的時候,我們才將指針放到slice里面,這點希望大家注意。

原文鏈接:https://www.toutiao.com/i7048616935805829671/

延伸 · 閱讀

精彩推薦
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
主站蜘蛛池模板: 中文字幕亚洲一区二区三区 | 国产在线中文字幕 | 国产成人在线一区二区 | 伊人网电影 | 日日干,天天干 | 国产免费高清 | 欧美一区二区三区电影 | 国产精品久久久久久久福利院 | 亚洲精品乱码久久久久久久 | 精品久久av | 国产欧美综合视频 | 亚洲国产成人精品女人久久 | 看黄色片网站 | 欧美成人免费 | 四虎影院在线免费播放 | 亚洲一区二区三区在线播放 | 国产精品美女久久久 | 成人免费视频观看 | 精品亚洲一区二区 | 最新电影在线高清免费完整观看视频 | 伊人伊人| 在线观看亚洲区 | 久久亚洲天堂 | 国产成人久久精品一区二区三区 | 亚洲综合精品久久 | 日韩欧美一区视频 | 中文字幕成人 | 国产精品久久久久久亚洲调教 | 成人免费xxxxx在线观看 | 国产欧美一区二区视频 | 欧美大片一区二区 | 日韩国产 | 亚洲综合精品久久 | 99热婷婷 | 亚洲视频免费观看 | 欧美国产日韩一区 | 国产一区二区三区在线免费看 | 高清二区 | 丁香婷婷综合激情五月色 | 中国一级特黄毛片大片 | 精品国产精品一区二区夜夜嗨 |