package main import ( "database/sql" "fmt" "log" "math/rand" "sync" "time" _ "xugu_driver/xugu" ) // 创建测试表 const createTableQuery = ` CREATE TABLE IF NOT EXISTS test_table ( id INT AUTO_INCREMENT PRIMARY KEY, value VARCHAR(255) NOT NULL );` // 插入数据的 SQL 语句 const insertQuery = `INSERT INTO test_table (value) VALUES (?)` // 读取数据的 SQL 语句 const selectQuery = `SELECT value FROM test_table WHERE id = ?` // 测试的并发度 const concurrency = 10 // 初始化随机种子 func init() { rand.Seed(time.Now().UnixNano()) } func main() { db, err := sql.Open("xugusql", "IP=10.28.20.101;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5190;AUTO_COMMIT=on;CHAR_SET=UTF8") if err != nil { log.Fatal(err) } // 创建测试表 _, err = db.Exec(createTableQuery) if err != nil { log.Fatalf("Failed to create test table: %v", err) } // 使用 WaitGroup 管理并发操作 var wg sync.WaitGroup // 记录成功和失败的操作次数 var successCount, failureCount int64 var mu sync.Mutex // 运行并发操作 for i := 0; i < concurrency; i++ { wg.Add(1) go func() { defer wg.Done() for { // 随机选择插入或查询操作 if rand.Intn(2) == 0 { // 执行写操作 // `INSERT INTO test_table (value) VALUES (?)` _, err := db.Exec(insertQuery, fmt.Sprintf("value-%d", rand.Int())) mu.Lock() if err != nil { failureCount++ } else { successCount++ } mu.Unlock() } else { // 执行读操作 id := rand.Intn(1000) + 1 var value string //`SELECT value FROM test_table WHERE id = ?` err := db.QueryRow(selectQuery, id).Scan(&value) mu.Lock() if err != nil { failureCount++ } else { successCount++ } mu.Unlock() } // 打印当前成功和失败的操作次数 mu.Lock() log.Printf("Success: %d, Failure: %d", successCount, failureCount) mu.Unlock() // 短暂休眠以防止过度频繁的请求 time.Sleep(100 * time.Millisecond) } }() } // 等待所有操作完成(实际上这个程序不会停止,因为循环是无限的) wg.Wait() defer db.Close() }