Help language development. Donate to The Perl Foundation

Inline::Go cpan:AZAWAWI last updated on 2017-12-02
# Inline::Go

 [![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).

## Example

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](examples) folder.

## Installation

- 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

## Testing

- 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

- [Calling Go Functions from Other Languages](
- [The Go Programming Language Specification ](

- [cgo Wiki](

## Author

Ahmad M. Zawawi, [azawawi]( on #perl6

## License

MIT License