zoukankan      html  css  js  c++  java
  • [Go] gocron源码阅读-groutine与channel应用到信号捕获

    直接使用go 函数名()可以开启一个grountine,channel可以接收信息并且如果没有数据时会阻塞住
    channel对应的是底层数据结构的引用,复制channel和函数传参都是拷贝的引用
    make的时候第二个参数是1,就表示是有缓存的channel

    无缓存的channel也叫同步channel

        c = make(chan interface{})
        //开启groutine
        go mySig()
        //主grountine不能断
        for {
            time.Sleep(time.Second)
            c <- "taoshihan"
        }
    func mySig() {
        for {
            str := <-c
            fmt.Println(str)
        }
    }

    信号处理使用channel通信

    func catchSignal() {
        c := make(chan os.Signal, 1)
        signal.Notify(c, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
        for {
            s := <-c
            logger.Info("收到信号 -- ", s)
            switch s {
            case syscall.SIGHUP:
                logger.Info("收到终端断开信号, 忽略")
            case syscall.SIGINT, syscall.SIGTERM:
                shutdown()
            }
        }
    }

    完整代码:

    package main
    
    import (
        "fmt"
        "os"
        "os/signal"
        "syscall"
        "time"
    )
    
    var c chan interface{}
    
    func main() {
        go catchSignal()
    
        c = make(chan interface{})
        //开启groutine
        go mySig()
        //主grountine不能断
        for {
            time.Sleep(time.Second)
            c <- "taoshihan"
        }
    
    }
    func mySig() {
        for {
            str := <-c
            fmt.Println(str)
        }
    }
    func catchSignal() {
        d := make(chan os.Signal, 1)
        signal.Notify(d, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
        for {
            s := <-d
            fmt.Println("收到信号 -- ", s)
            switch s {
            case syscall.SIGHUP:
                fmt.Println("收到终端断开信号, 忽略")
            case syscall.SIGINT, syscall.SIGTERM:
                //这里可以做一些退出动作
                fmt.Println("关闭")
                os.Exit(0)
            }
        }
    }
  • 相关阅读:
    php连接mysql的三种方式和预处理下的sql注入
    报错注入原理学习
    学习BurpSuite半自动化盲注和一些小总结
    django项目实战
    docker出题和编写dockerfile
    Django零基础到项目实战
    爬虫之某古诗词网站
    [学习笔记] 左偏树入门
    [学习笔记] 自适应Simpson算法
    [题解向] [Luogu P2029]跳舞
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11871405.html
Copyright © 2011-2022 走看看