暴露一些golang函数
- 注意:
- // 和export 必须要紧挨着
- 如果需要传参的话,需要用c的类型
字符串用*C.char,go的函数接受使用的时候必须要转化成go的string类型,用C.GoString进行转换,返回字符串类型时也必须要用*C.char类型 用C.CString转换 - cgo 必须要对*C.char类型的变量进行释放,不然会引起内存泄漏,用C.free(unsafe.Pointer(restring)) 方式释放,但是不能提前释放,否则python调用的时候会出现乱码的情况
//export必须要放在函数上方,后面接上python调用的函数名称
//export get_stat_info
def get_stat_info(quote *C.char) *C.char {
var (
resString *C.char
res = make(map[string]string)
mapString string
)
quoteS := C.GoString(quote)
defer C.free(unsafe.Pointer(resString))
stat, err := node_exporter.GetStatInfo(quoteS)
if err != nil {
errF := fmt.Sprintf("couldn't get net stat info: %v", err)
res["code"] = "1"
res["content"] = errF
mapString = node_exporter.ProcessMap(res)
resString = C.CString(mapString)
return resString
}
if stat == "" {
errF := fmt.Sprintf("quote not exist: %v", quoteS)
res["code"] = "1"
res["content"] = errF
mapString = node_exporter.ProcessMap(res)
resString = C.CString(mapString)
return resString
}
res["code"] = "0"
res["content"] = stat
mapString = node_exporter.ProcessMap(res)
resString = C.CString(mapString)
return resString
}
}