暴露一些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
  }
}