Add server components
build-winui / winui (push) Has been cancelled

This commit is contained in:
QWQLwToo
2026-06-26 13:28:09 +08:00
parent 7ecc6a8923
commit 079ee4eaeb
168 changed files with 37475 additions and 0 deletions
+173
View File
@@ -0,0 +1,173 @@
# CGO 问题解决方案
## 问题说明
如果遇到以下错误:
```
SQLite 连接失败: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work
```
这是因为 SQLite 驱动 (`go-sqlite3`) 需要 CGO 支持,但当前二进制文件是在禁用 CGO 的情况下编译的。
## 解决方案
### 方案 1: 启用 CGO 重新编译(推荐用于 SQLite)
#### Windows
1. **安装 GCC 编译器**(如果还没有):
- 下载并安装 [TDM-GCC](https://jmeubank.github.io/tdm-gcc/) 或 [MinGW-w64](https://www.mingw-w64.org/)
- 确保 GCC 在系统 PATH 中
2. **验证 CGO 支持**
```powershell
go env CGO_ENABLED
```
应该显示 `1`(如果显示 `0`,需要设置环境变量)
3. **启用 CGO 并重新编译**
```powershell
$env:CGO_ENABLED="1"
go build -o software-download-center.exe .
```
#### Linux/macOS
1. **安装 GCC**(如果还没有):
```bash
# Ubuntu/Debian
sudo apt-get install build-essential
# macOS
xcode-select --install
```
2. **启用 CGO 并重新编译**
```bash
export CGO_ENABLED=1
go build -o software-download-center .
```
### 方案 2: 使用 MySQL 数据库(无需 CGO)
如果不想处理 CGO 问题,可以直接使用 MySQL:
#### Windows (PowerShell)
```powershell
# 设置 MySQL 环境变量
$env:DB_TYPE="mysql"
$env:DB_HOST="localhost"
$env:DB_PORT="3306"
$env:DB_USER="root"
$env:DB_PASSWORD="your_password"
$env:DB_NAME="software_download_center"
# 运行程序
go run main.go
```
#### Linux/macOS
```bash
# 设置 MySQL 环境变量
export DB_TYPE=mysql
export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=root
export DB_PASSWORD=your_password
export DB_NAME=software_download_center
# 运行程序
go run main.go
```
#### 使用编译后的程序
```powershell
# Windows
$env:DB_TYPE="mysql"
$env:DB_HOST="localhost"
$env:DB_PORT="3306"
$env:DB_USER="root"
$env:DB_PASSWORD="your_password"
$env:DB_NAME="software_download_center"
.\software-download-center.exe
```
```bash
# Linux/macOS
export DB_TYPE=mysql
export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=root
export DB_PASSWORD=your_password
export DB_NAME=software_download_center
./software-download-center
```
## 快速测试 MySQL 连接
在运行程序之前,确保 MySQL 服务正在运行,并且数据库已创建:
```sql
-- 连接到 MySQL
mysql -u root -p
-- 创建数据库
CREATE DATABASE software_download_center CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 退出
EXIT;
```
## 永久解决方案
### 选项 A: 始终启用 CGO(用于 SQLite
在编译脚本中设置 `CGO_ENABLED=1`
**Windows (build.bat)**:
```batch
@echo off
set CGO_ENABLED=1
go build -o software-download-center.exe .
```
**Linux/macOS (build.sh)**:
```bash
#!/bin/bash
export CGO_ENABLED=1
go build -o software-download-center .
```
### 选项 B: 默认使用 MySQL
在 `main.go` 或环境配置中设置默认数据库类型为 MySQL。
## 检查当前 CGO 状态
```bash
go env CGO_ENABLED
```
- `1` = CGO 已启用(可以使用 SQLite
- `0` = CGO 已禁用(需要使用 MySQL
## 常见问题
### Q: 为什么需要 CGO
A: SQLite 的 Go 驱动 (`go-sqlite3`) 是对 C 库的包装,需要 CGO 来调用 C 代码。
### Q: 可以完全避免 CGO 吗?
A: 可以,使用 MySQL 或其他纯 Go 实现的数据库驱动(如 `modernc.org/sqlite`,但功能可能有限)。
### Q: MySQL 需要 CGO 吗?
A: 不需要,MySQL 驱动 (`go-sql-driver/mysql`) 是纯 Go 实现的。
## 推荐方案
- **开发环境**: 使用 SQLite(需要启用 CGO
- **生产环境**:
- 如果已有 MySQL 服务器,使用 MySQL(无需 CGO)
- 如果希望简单部署,使用 SQLite + CGO