【Golang】Demo
2022/4/23 23:44:13
本文主要是介绍【Golang】Demo,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
并发控制
package main // demo 参考地址https://studygolang.com/articles/25950 import ( "github.com/siddontang/go-log/log" "math/rand" "sync" "time" ) func task() int { //取[n,m]的数 语法入下: rand.Seed(time.Now().UnixNano()) //num := rand.Intn(m-n+1) + n num := rand.Intn(5-1+1) + 1 return num } // WaitGroup 一个异步结构体 type WaitGroup struct { workChan chan int wg sync.WaitGroup } // NewPool 生成一个工作池, coreNum 限制 func NewPool(coreNum int) *WaitGroup { ch := make(chan int, coreNum) return &WaitGroup{ workChan: ch, wg: sync.WaitGroup{}, } } // Add 添加 func (ap *WaitGroup) Add(num int) { // 不向channel里面写大量数据,channel中传递的都是数据的拷贝,可能会影响性能 // channel只控制并发的数量 ap.workChan <- num ap.wg.Add(1) } // Done 完结 func (ap *WaitGroup) Done() { select { case <-ap.workChan: ap.wg.Done() } } // Wait 等待 func (ap *WaitGroup) Wait() { ap.wg.Wait() } func testFunc(i int, wg *WaitGroup) { defer wg.Done() t := task() log.Infof("Index %d, duration %d, begin!", i, t) time.Sleep(time.Duration(t) * time.Second) log.Infof("Index %d, duration %d, finish!", i, t) } func main() { work := NewPool(4) for i := 0; i < 20; i++ { work.Add(1) go testFunc(i, work) } log.Info("waiting...") work.Wait() log.Info("done") }
安全退出
func stopSignal(pid int, r *sql.Db) { sigs := make(chan os.Signal, 1) log.Errorf("register signal notify, pid: %d", pid) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) for { s := <-sigs log.Error("recv signal: ", s) switch s { case syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT: // close kafka r.Close() log.Errorf("pid: %d exit", pid) os.Exit(0) } } } func main() { stopSignal(os.Getpid(), r) }
这篇关于【Golang】Demo的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南