Go 1.5增加了对构建可从C调用的共享库的支持(因此可以通过FFI从Ruby调用).这使得这个过程比1.5版本之前的版本更容易(当时需要编写C粘合层),Go运行时现在可用,这使得它在现实生活中实际有用(goroutines和内存分配以前是不可能的,因为它们需要Go运行时,如果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
后面的符号表示函数的导出方式.
戈弗鲁比.rb:
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