登录
首页 >  Golang >  Go问答

在 Go (golang) 中编写一个 Ruby 扩展

来源:Golang技术栈

时间:2023-03-21 08:53:11 467浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《在 Go (golang) 中编写一个 Ruby 扩展》,以下内容将会涉及到golang,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

是否有一些关于如何在 Go 中为 Ruby 编写扩展的教程或实践课程?

正确答案

Go 1.5 添加了对构建可从 C 调用的共享库(因此从 Ruby 通过 FFI)的支持。这使得该过程比 1.5 之前的版本更容易(当需要编写 C 粘合层时),并且 Go 运行时现在可用,这使得它在现实生活中真正有用(以前不可能使用 goroutines 和内存分配,因为它们需要 Go 运行时,如果 Go 不是主要入口点,则该运行时不可用)。

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是函数的导出方式。

goFromRuby.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

今天关于《在 Go (golang) 中编写一个 Ruby 扩展》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表