See also, http://libraryofalexandria.io/cgo/
cgo
Using Go cgo
has a lot of trap.
but Not "C" pkg also directory in $GOROOT/src
. IDE's(vim) Goto command not works.
So, Here collect materials.
cgo compiling file extension
C
.c
, .s
, .S
C++
.cc
, .cpp
, .cxx
Header
Any .h
, .hh
, .hpp
, .hxx
files will not be compiled separately.
but, if these header files are changed, the C and C++ files will be recompiled.
cgo environment variable
Building Go
CC
, CXX
, CC_FOR_TARGET
, CXX_FOR_TARGET
.go
Compiling CGO_CFLAGS
, CGO_CPPFLAGS
, CGO_CXXFLAGS
, CGO_LDFLAGS
cgo convert C-Go string type
string
// Go string to C string; result must be freed with C.free
func C.CString(string) *C.char
// C string to Go string
func C.GoString(*C.char) string
// C string, length to Go string
func C.GoStringN(*C.char, C.int) string
// C pointer, length to Go []byte
func C.GoBytes(unsafe.Pointer, C.int) []byte
C Types in Go
char
type C.char
type C.schar (signed char)
type C.uchar (unsigned char)
short
type C.short
type C.ushort (unsigned short)
int
type C.int
type C.uint (unsigned int)
long
type C.long
type C.ulong (unsigned long)
longlong
type C.longlong (long long)
type C.ulonglong (unsigned long long)
float
type C.float
double
type C.double
Directly access struct type
As in C.struct_stat
struct
type C.struct_***
union
type C.union_***
enum
type C.enum_***
void*
See also https://golang.org/pkg/unsafe/
func unsafe.Pointer() *ArbitraryType