一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 腳本之家 - Golang - go語言中切片與內存復制 memcpy 的實現操作

go語言中切片與內存復制 memcpy 的實現操作

2021-06-01 00:48許野平 Golang

這篇文章主要介紹了go語言中切片與內存復制 memcpy 的實現操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Go 語言原則上不支持內存的直接操作訪問,但是提供了切片功能。

最初我以為切片就是動態數組,實際程序設計過程中發現,切片是提供數組一個內存片段的一個合法的手段,利用切片功能,實際上我們可以自由訪問數組的任何一個片段,因而可以借助 copy 函數,實現內存復制。

不同類型之間的數據復制,可以借助 unsafe 取出變量地址,類型轉換為數組后,利用數組切片,實現內存復制。

不羅嗦了,示例代碼如下:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main
import (
    "fmt"
    "unsafe"
)
func main() {
    //數組之間的數據復制
    var a = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    var b = [10]int{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
    copy(a[5:8], b[0:])
    fmt.Println(a, b)
    //不同數據類型之間的復制
    var c uint32 = 0x04030201
    var d [4]byte
    p := unsafe.Pointer(&c)
    q := (*[4]byte)(p)
    copy(d[0:], (*q)[0:])
    fmt.Println(d)
}

運行結果:

[0 1 2 3 4 -1 -1 -1 8 9] [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1]

[1 2 3 4]

補充:go語言之切片復制與追加

看代碼吧~

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main
import (
 "fmt"
)
func main() {
 // copy示例
 // 創建一個新的更大的切片并把原分片的內容都拷貝過來
 sl_from := []int{1, 2, 3}
 sl_to := make([]int, 10)
 n := copy(sl_to, sl_from)
 fmt.Println("num:", n, "items", sl_to)
 // append追加元素
 // append 方法將0個或多個具有相同類型 s 的元素追加到切片后面并且返回新的切片
 // 追加的元素必須和原切片的元素同類型
 // 如果 s 的容量不足以存儲新增元素,append 會分配新的切片來保證已有切片元素和新增元素的存儲
 sl_a := []int{1, 2, 3}
 sl_a = append(sl_a, 4, 5, 6)
 fmt.Println(sl_a)
 // append 方法追加一個切片
 var sl_b []int
 sl_c := []int{1, 2, 3}
 sl_b = append(sl_b, sl_c...)
 fmt.Println(sl_b)
 // 將一個元素快速轉為對應切片類型
 x := 5
 Test([]int{x})
}
func Test(x []int)  {
 fmt.Println(x)
}

運行結果:

num: 3 items [1 2 3 0 0 0 0 0 0 0]

[1 2 3 4 5 6]

[1 2 3]

[5]

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。如有錯誤或未考慮完全的地方,望不吝賜教。

原文鏈接:https://yeping.blog.csdn.net/article/details/80472035

延伸 · 閱讀

精彩推薦
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

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

    天易獨尊11682021-06-09
  • Golanggolang 通過ssh代理連接mysql的操作

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

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

    a165861639710342021-03-08
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

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

    helight2992020-05-14
  • Golanggo日志系統logrus顯示文件和行號的操作

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

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

    SmallQinYan12302021-02-02
  • Golanggolang如何使用struct的tag屬性的詳細介紹

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

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

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

    Golang通脈之數據類型詳情

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

    4272021-11-24
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

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

    腳本之家3642020-04-25
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

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

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

    李浩的life12792020-05-27
主站蜘蛛池模板: 久久综合狠狠综合狠狠 | 亚洲AV久久无码精品九号软件 | 91精品手机国产在线观 | 亚洲爱视频 | 女bbbxxx毛片视频 | 色综合久久中文字幕综合网 | 免费网站直接进入 | 天天做天天爽 | 第一次破女视频国产一级 | 亚洲第一在线 | 日韩精品视频福利资源站 | 精新精新国产自在现 | 小货SAO边洗澡边CAO你动漫 | 楚乔传第二部免费播放电视连续剧 | 99色在线播放 | 不卡一区二区三区卡 | 久久精品国产在热亚洲完整版 | 精品一区二区三区自拍图片区 | а天堂中文最新版在线官网视频 | 插鸡网站| 成人小视频在线观看免费 | 日本护士撒尿xxxxhd | 亚洲国产精品自在现线让你爽 | 国产精品国产色综合色 | 亚洲国产综合网 | 精品国产成人a区在线观看 精品高潮呻吟99AV无码视频 | 欧美日韩国产成人精品 | ts人妖系列在线专区 | 嫩草影院永久在线播放 | 久久婷婷电影网 | 国产精品反差婊在线观看 | 91资源站| 国产成人一区二区三区影院免费 | 丝袜美女被艹 | 强漂亮白丝女教师小说 | 国产靠逼视频 | 我被男人下药添得好爽 | 亚洲色图综合网 | 国产毛片在线观看 | 国产私人影院 | 精品99在线观看 |