开源项目
- https://github.com/dolthub/go-library-sample
- https://github.com/draffensperger/go-interlang
- https://github.com/kbehouse/go_call_cxx_so
- https://github.com/tailscale/libtailscale
- https://github.com/iikira/golang-msvc
- https://github.com/vladimirvivien/go-cshared-examples
文档
- Embedding Go in C
- Calling C code from go
- C? Go? Cgo!
- CGO编程(Go语言高级编程)
- https://stackoverflow.com/questions/14581063/golang-cgo-converting-union-field-to-go-type
- https://sunzenshen.github.io/tutorials/2015/05/09/cgotchas-intro.html
- https://totallygamerjet.hashnode.dev/the-smallest-go-binary-5kb
代码片段
Convert ‘C’ array to golang slice
func carray2slice(array *C.int, len int) []C.int {
var list []C.int
sliceHeader := (*reflect.SliceHeader)((unsafe.Pointer(&list)))
sliceHeader.Cap = len
sliceHeader.Len = len
sliceHeader.Data = uintptr(unsafe.Pointer(array))
return list
}