Go (golang) で Ruby 拡張機能を書く 質問する

Go (golang) で Ruby 拡張機能を書く 質問する

Go で Ruby の拡張機能を作成する方法に関するチュートリアルや実践的なレッスンはありますか?

ベストアンサー1

Go 1.5 では、C から (つまり、FFI 経由で Ruby から) 呼び出し可能な共有ライブラリの構築のサポートが追加されました。これにより、1.5 より前のリリース (C グルー レイヤーを記述する必要があった) よりもプロセスが簡単になり、Go ランタイムが使用できるようになったため、実際に実生活で役立ちます (Go がメイン エントリ ポイントでない場合、Go ランタイムが必要なため、以前は goroutine とメモリ割り当ては不可能でした)。

goFuncs.go:

package main

import "C"

//export GoAdd
func GoAdd(a, b C.int) C.int {
    return a + b
}

func main() {} // Required but ignored

エクスポートされる関数ごとにコメントが必要であることに注意してください//export GoAdd。その後の記号は、export関数がどのようにエクスポートされるかを示します。

: ...

require 'ffi'

module GoFuncs
  extend FFI::Library
  ffi_lib './goFuncs.so'
  attach_function :GoAdd, [:int, :int], :int
end

puts GoFuncs.GoAdd(41, 1)

ライブラリは以下を使用して構築されます:

go build -buildmode=c-shared -o goFuncs.so goFuncs.go

Ruby スクリプトを実行すると、次の結果が生成されます。

42

おすすめ記事