NAME

    FFI::Platypus::Lang::Go - Documentation and tools for using Platypus
    with Go

VERSION

    version 0.01

SYNOPSIS

    Go code:

     /*
      * borrowed from
      * https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf
      */
     
     package main
     
     import "C"
     
     import (
            "fmt"
            "math"
            "sort"
            "sync"
     )
     
     var count int
     var mtx sync.Mutex
     
     //export Add
     func Add(a, b int) int { return a + b }
     
     //export Cosine
     func Cosine(x float64) float64 { return math.Cos(x) }
     
     //export Sort
     func Sort(vals []int) { sort.Ints(vals) }
     
     //export Log
     func Log(msg string) int {
            mtx.Lock()
            defer mtx.Unlock()
            fmt.Println(msg)
            count++
            return count
     }
     
     func main() {}

    Perl code:

     package Awesome::FFI;
     
     use strict;
     use warnings;
     use FFI::Platypus;
     use FFI::Go::String;
     use base qw( Exporter );
     
     our @EXPORT_OK = qw( Add Cosine Log );
     
     my $ffi = FFI::Platypus->new( api => 1, lang => 'Go' );
     # See FFI::Platypus::Bundle for the how and why
     # bundle works.
     $ffi->bundle;
     
     $ffi->attach( Add    => ['goint','goint'] => 'goint'     );
     $ffi->attach( Cosine => ['gofloat64'    ] => 'gofloat64' );
     $ffi->attach( Log    => ['gostring'     ] => 'goint'     );
     
     1;

DESCRIPTION

    This distribution is the Go language plugin for Platypus. It provides
    the definition for native Go types, like goint and gostring. It also
    provides a FFI::Build interface for building Perl extensions written in
    Go.

    For a full working example based on the synopsis above, including
    support files like Makefile.PL and tests, see the examples/Awesome-FFI
    directory that came with this distribution.

SEE ALSO

    FFI::Platypus

      More about FFI and Platypus itself.

    FFI::Platypus::Type::GoString

      Type plugin for the go string type.

    FFI::Go::String

      Low level interface to the go string type.

    FFI::Build::File::GoMod

      FFI::Build class for handling Go modules.

AUTHOR

    Graham Ollis <plicease@cpan.org>

COPYRIGHT AND LICENSE

    This software is copyright (c) 2018 by Graham Ollis.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.

