1. 程式人生 > >Go 語言的切片與記憶體複製 memcpy 的實現方法

Go 語言的切片與記憶體複製 memcpy 的實現方法

Go 語言原則上不支援記憶體的直接操作訪問,但是提供了切片功能。最初我以為切片就是動態陣列,實際程式設計過程中發現,切片是提供陣列一個記憶體片段的一個合法的手段,利用切片功能,實際上我們可以自由訪問陣列的任何一個片段,因而可以藉助 copy 函式,實現記憶體複製。

不同型別之間的資料複製,可以藉助 unsafe 取出變數地址,型別轉換為陣列後,利用陣列切片,實現記憶體複製。

不羅嗦了,示例程式碼如下:

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]