go-interlang

Examples of calls between Go and C/C++ (and how to call a Go shared object from Node/Ruby/Python/Java)

  • Owner: draffensperger/go-interlang
  • Platform:
  • License::
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

Go interlanguage call examples

Examples of calls between Go and C/C++ and calling Go from dynamic languages.

The examples are designed to work on Mac and Linux. If you're using Windows,
feel free to reach out to me to request updates for examples that don't work
correctly.

Calls from Go to C (go_to_c folder)

These examples use cgo to enable calls to C.

  • Calling a C snippet in the cgo comment: c_in_comment
  • Calling a C statically-linked library (.a file): static_c_lib
  • Calling a C dynamically-linked library (.so or .dylib): dynamic_c_lib

Calls from Go to C++ (go_to_cxx folder)

C++ has more complex calling conventions (e.g. function overloading, inheritance, templates) and so it uses name mangling which adds a step when calling it from Go. Below are ways to do it.

  • Calling C++ via a C wrapper function: c_wrapper
  • Calling C++ via an auto-generated SWIG wrapper:
    swig

Calls from C/C++ to Go (c_to_go folder)

Calls from Python/Node.js/Ruby/Java to Go (dyn_langs_to_go folder)

Go now allows building a C-compatible dynamically-linked library with buildmode=c-shared. That allows any language that can call C dynamic libraries to call Go.

Cross-language call benchmarks

There is a cost to calling between languages a Go to C call is about 50x slower
than a pure Go call and a Ruby FFI call is about 30x slower than a pure Ruby
call. For more details, see the benchmarks section.

Helpful Links

Cgo documentation: golang.og/cmd/cgo/

Documentation for go command (see especially go build section and "Calling between Go and C"):
golang.org/cmd/go/

SWIG Documentation: swig.org

SWIG Go examples: github.com/swig/swig/tree/master/Examples/go

Gccgo documentation: golang.org/doc/install/gccgo

License

The code in this repo is MIT Licensed.

Main metrics

Overview
Name With Ownerdraffensperger/go-interlang
Primary LanguageGo
Program languageC (Language Count: 9)
Platform
License:
所有者活动
Created At2015-10-11 01:20:42
Pushed At2017-04-14 01:13:13
Last Commit At2017-04-13 21:13:13
Release Count0
用户参与
Stargazers Count430
Watchers Count15
Fork Count63
Commits Count44
Has Issues Enabled
Issues Count6
Issue Open Count2
Pull Requests Count1
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private