質問:
指定配列への安全でないポインタです。メモリを消費せずに配列または配列からスライスを作成するにはどうすればよいですか? copy?
答え:
Reflect を使用したスライスの作成:
推奨されるアプローチは、reflect パッケージを使用して安全でないデータと同じ基礎となるデータを指すスライス ヘッダーを作成します。 pointer.
// Create a slice header sh := &reflect.SliceHeader{ Data: p, // Unsafe pointer to the array Len: size, Cap: size, } // Use the slice header to create a slice data := *(*[]byte)(unsafe.Pointer(sh))
Reflect を使用した配列の作成:
安全でないポインタから配列 (連続したメモリ内の要素へのポインタ) を作成するには、まず次のようにします。スライスしてからそれを取りますaddress:
// Create a slice data := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{ Data: p, Len: size, Cap: size, })) // Get the address of the slice (pointer to the first element) arr := (*[size]byte)(unsafe.Pointer(&data[0]))
注意事項と警告:
以上が「unsafe.Pointer」から Go スライスまたは配列を安全に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。