Use Go code within Perl 6
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status Build status

Use inline Go code within your Perl 6 source code. The project has the following ambitious goals to achieve:

  • Parse Go code using Perl 6 grammars with test suite taking directly from Go language specification.
  • Transform Go functions and classes to be usable within Perl 6.
  • Provide a simple and robust way to take advantage of Go groutines in Perl 6.

Note: This currently a totally experimental module. Please do not use on a production system.

The module is currently using simple regular expression to find exported go functions signatures with a simple Go-to-Perl-6 type mapping. The Perl 6 NativeCall Go function wrapper is added via an evil EVAL into the current object via a role (to support multiple objects).


use v6.c;

my $code = '
package main

import ("C"; "fmt")

//export Add_Int32
func Add_Int32(a int, b int) int { return a + b }

//export Hello
func Hello() { fmt.Println("Hello from Go!") }

func main() { }

my $go = :code( $code ) );
say $go.Add_Int32(1, 2);

For more examples, please see the examples folder.


  • Please install the Go language toolchain from here. You need at least Go 1.5 or later.

  • On windows, you need the gcc toolchain. Luckily you can have that easily by installing Strawberry Perl.

  • Install it using zef (a module management tool bundled with Rakudo Star):

$ zef install Inline::Go


  • To run tests:
$ prove -ve "perl6 -Ilib"
  • To run all tests including author tests (Please make sure Test::Meta is installed):
$ zef install Test::META
$ AUTHOR_TESTING=1 prove -e "perl6 -Ilib"

See Also


Ahmad M. Zawawi, azawawi on #perl6.


MIT License