Git Product home page Git Product logo

rust-plus-golang's Introduction

Rust + Golang


This repository shows how, by combining cgo and Rust's FFI capabilities, we can call Rust code from Golang.

Run make build-all and then make run-all to see Rust + Golang in action, building and running two binaries, one where the Rust lib is compiled to a shared lib, and one to a static lib. You should see some log output printed to stderr and then Hello John Smith! printed to stdout. This results in the binaries main_shared and main_static which you can run. See Makefile in this repository for more useful make targets.

You can do this for your own project

Begin by creating a lib directory, where you will keep your Rust libraries. Andrew Oppenlander's article on creating a Rust dynamic library is a great introduction.

Then, you need to create a C header file for your library. Just copy the libc types that you used.

All that is left to do is to add some cgo-specific comments to your Golang code. These comments tell cgo where to find the library and its headers.

For importing a shared lib into your go code, the following must go along with an additional option given to go build (see Makefile):

/*
#cgo LDFLAGS: -L./lib -lhello
#include "./lib/hello.h"
*/
import "C"

For a static lib, the additional -ldl is necessary compared to the shared lib, presumably because in the shared lib linking, dl is linked in some other way by the magic of shared libs. To import a static lib into your go code:

/*
#cgo LDFLAGS: ./lib/libhello.a -ldl
#include "./lib/hello.h"
*/
import "C"

There should not be a newline between */ and import "C".

rust-plus-golang's People

Contributors

mediremi avatar vdods avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.