An open API service indexing awesome lists of open source software.

https://github.com/pseudocodes/datacollect

CTP 看穿式终端信息采集库 Go 封装,支持 macOS 和 Linux 平台。
https://github.com/pseudocodes/datacollect

Last synced: 4 months ago
JSON representation

CTP 看穿式终端信息采集库 Go 封装,支持 macOS 和 Linux 平台。

Awesome Lists containing this project

README

          

# datacollect

CTP 看穿式终端信息采集库的 Go 封装,支持 macOS、Linux 和 Windows 平台。

## 安装

```bash
go get github.com/pseudocodes/datacollect
```

## 使用方式

项目提供三种使用方式:

### 方式一:静态链接(需要 cgo)

直接导入 prd 或 tst 包:

```go
import datacollect "github.com/pseudocodes/datacollect/pkg/tst"
// 或
import datacollect "github.com/pseudocodes/datacollect/pkg/prd"

func main() {
version := datacollect.GetAPIVersion()
data, code, err := datacollect.GetSystemInfo()
data, code, err := datacollect.GetSystemInfoUnencrypted()
}
```

### 方式二:动态加载 - cgo 版本

使用 dyn 包动态加载库,可同时使用 prd 和 tst:

```go
import "github.com/pseudocodes/datacollect/pkg/dyn"

func main() {
dc, _ := dyn.NewDataCollector("path/to/library")
defer dc.Close()

version := dc.GetAPIVersion()
data, code, err := dc.GetSystemInfo()
}
```

### 方式三:动态加载 - 纯 Go 版本(推荐)

使用 pure 包通过 purego 动态加载库,无需 cgo:

```go
import "github.com/pseudocodes/datacollect/pkg/pure"

func main() {
// macOS
dc, _ := pure.NewDataCollector("path/to/MacDataCollect.framework")
// Linux
dc, _ := pure.NewDataCollector("path/to/libLinuxDataCollect.so")
// Windows
dc, _ := pure.NewDataCollector("path/to/WinDataCollect.dll")
defer dc.Close()

version := dc.GetAPIVersion()
data, code, err := dc.GetSystemInfo()
data, code, err := dc.GetSystemInfoUnencrypted()
}
```

## 平台支持

| 函数 | macOS | Linux | Windows |
|------|-------|-------|---------|
| GetSystemInfo | ✓ | ✓ | ✓ |
| GetSystemInfoUnencrypted | ✓ | ✓ (fallback) | ✓ (fallback) |
| GetAPIVersion | ✓ | ✓ | ✓ |

## 包对比

| 特性 | prd/tst | dyn | pure |
|------|---------|-----|------|
| 需要 cgo | ✓ | ✓ | ✗ |
| 可同时加载多个库 | ✗ | ✓ | ✓ |
| macOS 支持 | ✓ | ✓ | ✓ |
| Linux 支持 | ✓ | ✓ | ✓ |
| Windows 支持 | ✓ | ✓ | ✓ |
| 依赖 | 无 | 无 | purego, x/sys |

## 注意事项

使用静态链接方式(prd/tst)时,两个包不能同时在一个程序中使用,因为底层库导出相同的符号名会导致冲突。

如需同时使用 prd 和 tst,请使用 dyn 或 pure 包的动态加载方式。

## 构建

```bash
# 静态链接示例
go build -o static_demo ./examples/static

# 动态加载示例 (cgo)
go build -o dynamic_demo ./examples/dynamic

# 纯 Go 示例 (推荐)
go build -o purego_demo ./examples/purego
```

## 目录结构

```
├── pkg/
│ ├── prd/ # 生产环境包(静态链接,需要 cgo)
│ ├── tst/ # 测试环境包(静态链接,需要 cgo)
│ ├── dyn/ # 动态加载包(需要 cgo)
│ └── pure/ # 纯 Go 动态加载包(推荐)
├── examples/
│ ├── static/ # 静态链接示例
│ ├── dynamic/ # cgo 动态加载示例
│ └── purego/ # 纯 Go 示例
├── lib/ # 原始 SDK 文件
└── README.md
```

## License

MIT