zoukankan      html  css  js  c++  java
  • 批量导入实现逻辑

    1 批量验证

    2 循环入库

    3 导入提示

    package main
    
    import (
        "fmt"
        "sync"
        "time"
    )
    
    var wg sync.WaitGroup
    
    // ExcuteResult 执行结果集
    type ExcuteResult struct {
        data map[string]interface{}
        mux  *sync.Mutex
    }
    
    // NewExcuteResult 创建一个执行结果集
    func NewExcuteResult(data map[string]interface{}) *ExcuteResult {
        return &ExcuteResult{
            data: data,
            mux:  &sync.Mutex{},
        }
    }
    
    // Get 获取结果集的元素-加锁保证并发安全
    func (d *ExcuteResult) Get(key string) interface{} {
        d.mux.Lock()
        defer d.mux.Unlock()
        return d.data[key]
    }
    
    // Set 设置结果集的元素值-加锁保证并发安全
    func (d *ExcuteResult) Set(key string, value interface{}) {
        d.mux.Lock()
        defer d.mux.Unlock()
        d.data[key] = value
    }
    
    func main()  {
        excelData := []string{"1","2","3","4","5","6","7","8","9","10"}
        dict := NewExcuteResult(map[string]interface{}{})
        for _,v := range excelData{
            wg.Add(1)
            go readExcel(v,dict)
            // 通过管道阻塞协程执行
            // <-ch
        }
        // 主协程让出时间片 - 但是不会一直等待-如果子协程sleep时间过于长也会直接往下执行
        // runtime.Gosched()
        wg.Wait()
        fmt.Println("主协程结束")
        // 从管道拿数据
        fmt.Println(dict)
        
    }
    
    func readExcel(v string,d *ExcuteResult)(result string){
        fmt.Println(v)
        time.Sleep(time.Second)
        // 给管道写数据
        // ch <- v
        d.Set(v,v)
        wg.Done()
        return v
    }
  • 相关阅读:
    #与javascript:void(0)的区别
    单选框、复选框、下拉列表
    数据类型后的“?”
    c#中日期的处理
    日期控件html
    javascript获取后台传来的json
    Hashtable语法简介
    Hashtable(哈希表)
    Dictionary 字典
    远程SQL Server连接不上
  • 原文地址:https://www.cnblogs.com/xuweiqiang/p/12612257.html
Copyright © 2011-2022 走看看