Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menghantar Tatasusunan CGO ke Go Slice dengan Selamat dan Cekap?

Bagaimanakah Saya Boleh Menghantar Tatasusunan CGO ke Go Slice dengan Selamat dan Cekap?

Susan Sarandon
Lepaskan: 2024-12-06 06:16:23
asal
196 orang telah melayarinya

How Can I Safely and Efficiently Cast a CGO Array to a Go Slice?

Menghantar Array CGO ke Go Slice: Meneroka Pendekatan Lebih Selamat dan Licik

Dalam Go, merapatkan jurang antara tatasusunan CGO dan kepingan Go boleh menjadi cabaran yang berulang. Pendekatan biasa melibatkan menghantar secara manual setiap elemen tatasusunan CGO kepada jenis Go yang diingini, seperti yang dilihat dalam contoh berikut:

doubleSlc := [6]C.double{}

// Fill doubleSlc

floatSlc := []float64{float64(doubleSlc[0]), float64(doubleSlc[1]), float64(doubleSlc[2]),
                      float64(doubleSlc[3]), float64(doubleSlc[4]), float64(doubleSlc[5])}
Salin selepas log masuk

Walaupun berfungsi, kaedah ini boleh membosankan dan terdedah kepada ralat. Adakah terdapat cara yang lebih cekap dan boleh dipercayai untuk mencapai hasil yang sama?

Penghantaran Selamat dan Mudah Alih

Satu pendekatan mudah ialah menggunakan gelung for untuk menukar secara eksplisit setiap tatasusunan CGO elemen:

c := [6]C.double{1, 2, 3, 4, 5, 6}
fs := make([]float64, len(c))
for i := range c {
  fs[i] = float64(c[i])
}
Salin selepas log masuk

Kaedah ini memastikan keselamatan jenis dan mudah alih merentas platform.

Tipuan Tidak Selamat dan Licik

Sebagai alternatif, penyelesaian yang lebih tidak ortodoks memanfaatkan pakej tidak selamat dan manipulasi penunjuk Go:

c := [6]C.double{1, 2, 3, 4, 5, 6}
cfa := (*[6]float64)(unsafe.Pointer(&c))
cfs := cfa[:]
Salin selepas log masuk

Dengan merawat Tatasusunan CGO sebagai penunjuk kepada tatasusunan float64 (dengan mengandaikan jenis asas keserasian), kita boleh mendapatkan kepingan tanpa pemutus eksplisit. Walau bagaimanapun, kaedah ini bergantung pada operasi yang tidak selamat dan harus dikendalikan dengan berhati-hati.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Tatasusunan CGO ke Go Slice dengan Selamat dan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan