golang中cgo简单测试

lobo · · 1744 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

对于cgo的简单测试,运用scws分词库类源码实现分词。

代码:https://github.com/lobo-a/goproject

1、下载源码 http://www.xunsearch.com/scws/docs.php (本示例使用的是 1.2.3 版本)

2、解压scws包,进入目录,./configure 编译但不需要安装,会生成一个 config.h(这是我们需要的)

3、在go代码文件创建目录libscws

4、将scws目录下的config.h 和 其子目录libscws 下的文件全部拷贝到你的go代码目录libscws中

golang测试代码如下:

 

package main

/*
#cgo CFLAGS: -I${SRCDIR}/libscws
#cgo LDFLAGS: -L${SRCDIR}/libscws
#include <config.h>
#include <scws.c>
#include <charset.c>
#include <darray.c>
#include <lock.c>
#include <pool.c>
#include <rule.c>
#include <crc32.c>
#include <xdb.c>
#include <xdict.c>
#include <xtree.c>
*/
import "C"
import "unsafe"

import (
	"fmt"
)

func main() {
	xattr := C.CString("")
	defer C.free(unsafe.Pointer(xattr))
	text := C.CString("2008年中国网络游戏的实际销售收入达183.8亿元人民币,比2007年增长了百分之76.6")
	defer C.free(unsafe.Pointer(text))
	scws := C.scws_new()
	defer C.scws_free(scws)
	C.scws_set_charset(scws, C.CString("utf8"))
	// C.scws_set_debug(scws, C.SCWS_NA)
	// C.scws_set_ignore(scws, C.SCWS_YEA)
	C.scws_set_dict(scws, C.CString("etc/scws_dict_utf8.xdb"), C.SCWS_XDICT_XDB)
	C.scws_set_rule(scws, C.CString("etc/scws_rules_utf8.ini"))
	C.scws_send_text(scws, text, C.int(C.strlen(text)))
	tops := C.scws_get_tops(scws, C.int(10), xattr)
	defer C.scws_free_tops(tops);
	if tops != nil {
		num := 0;
		cur := tops
		for {
			num++
			if cur == nil || num>20 {
				break; 
			}
			fmt.Printf("idx:%d, word: %s, weight: %f \n", num, C.GoString(cur.word), cur.weight)
			cur = cur.next
		}
	}
}

 

参考:https://golang.org/src/cmd/cgo/doc.go

为了得到c的性能,确实挺麻烦的,需要注意c申请资源的释放工作
 


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1744 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传