123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- package main
- import (
- "database/sql"
- "fmt"
- "log"
- "os"
- "sync"
- _ "xugu_go_driver/xugu"
- )
- func main() {
- db, err := sql.Open("xugusql", "IP=192.168.2.216;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=15138;AUTO_COMMIT=on;CHAR_SET=UTF8")
- if err != nil {
- log.Fatal("err ", err)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- file, err := os.OpenFile("output.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
- if err != nil {
- log.Fatalf("无法打开文件: %v", err)
- }
- defer file.Close()
-
- logger := log.New(file, "", log.LstdFlags)
- var wg sync.WaitGroup
- const numGoroutines = 10000
- for i := 0; i < numGoroutines; i++ {
- wg.Add(1)
- go func(i int) {
- defer wg.Done()
- processQuery(db, i, logger)
- }(i)
- }
- wg.Wait()
- fmt.Println("所有goroutine已完成")
- defer db.Close()
- }
- func processQuery(db *sql.DB, id int, logger *log.Logger) {
- fmt.Printf("goroutine %d 开始\n", id)
-
- rows, err := db.Query("select * from gotab3;")
- if err != nil {
- fmt.Printf("[ERROR] %s\n", err.Error())
- logger.Printf("[ERROR] %s\n", err.Error())
- return
- }
- defer rows.Close()
- column, err := rows.Columns()
- if err != nil {
- fmt.Printf("[ERROR] %s\n", err.Error())
- logger.Printf("[ERROR] %s\n", err.Error())
- return
- }
- rowsValue := make([]interface{}, len(column))
- for key := range rowsValue {
- dest := make([]byte, 100000)
- rowsValue[key] = &dest
- }
- for rows.Next() {
- err := rows.Scan(rowsValue...)
- if err != nil {
- fmt.Printf("[ERROR] %s\n", err.Error())
- logger.Printf("[ERROR] %s\n", err.Error())
- return
- }
- for _, v := range rowsValue {
- sss := []byte(*(v.(*[]byte)))
- v = sss
- }
- }
-
- logger.Println("goroutine %d 完成\n", id)
- fmt.Printf("goroutine %d 完成\n", id)
- }
|