[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, )
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, )
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()
}
}
}
[Go] gocron源码阅读-groutine与channel应用到信号捕获的更多相关文章
- [Go] gocron源码阅读-go语言web框架Macaron
gocron源码中使用的是马卡龙框架,下面这个就是安装这个框架,和一般的MVC框架很像go get gopkg.in/macaron.v1git clone https://github.com/go ...
- [Go] gocron源码阅读-通过第三方cli包实现命令行参数获取和管理
gocron源码中使用的是下面这个第三方包来实现的,下面就单独的拿出来测试以下效果,和官方flag包差不多 go get github.com/urfave/cli package main impo ...
- [Go] gocron源码阅读-空接口类型interface{}
gocron源代码中的Action那个地方,就是个空接口类型Action interface{},可以传递任意类型进去,这里是传了个函数进去 command := cli.Command{ Name: ...
- [Go] gocron源码阅读-go语言中数组和切片的字面值初始化语法
源码中有这么一句,这个函数要求返回的是[]cli.Command,cli.Command类型的切片,这个地方直接使用字面值初始化了一个切片返回去了 return []cli.Command{comma ...
- [Go] gocron源码阅读-go语言中的切片接口和类型综合
// getCommands func getCommands() []cli.Command { command := cli.Command{ Name: "web", Usa ...
- [日常] gocron源码阅读-使用go mod管理依赖源码启动gocron
从 Go1.11 开始,golang 官方支持了新的依赖管理工具go modgo mod download: 下载依赖的 module 到本地 cachego mod edit: 编辑 go.modg ...
- [Go] gocron源码阅读-go语言中的切片和类型综合
在gocron.go文件的main函数中,有下面这一句,从这句代码中可以学习到切片和类型的综合运用 cliApp.Flags = append(cliApp.Flags, []cli.Flag{}.. ...
- [Go] gocron源码阅读-go语言的结构体
结构体类型 type 名字 struct{},下面这段是github.com/urfave/cli包里的代码,声明了一个App的结构体类型 type App struct { // The name ...
- [Go] gocron源码阅读-判断是否使用root用户执行
判断是linux系统,并且uid为0,allowRoot是通过命令行传参传进来的,通过flag包解析出来的,可以使用go run node.go -h看到这些参数 && !allowR ...
随机推荐
- oracle产销存的写法
with TEMP as (select sum(MMT.TRANSACTION_QUANTITY) QTY_QC, MMT.INVENTORY_ITEM_ID --,CAH.Legal_Entity ...
- activeMQ - how to install and run
apache activeMQ how to install and run https://www.cnblogs.com/lyxy/p/5969116.html
- 利用Github建立博客专用图库
0.前言 当我们写博客或者文档的时候常常需要引用图片.倘或引用图片的链接是外网的,常常会出现加载过慢的情况,并且不稳定的图片来源不方便管理.所以如果建立一个博客专用的图片仓库,统一管理维护方面就方便得 ...
- Java之Scanner类
Scanner类概述 一个可以解析基本类型和字符串的简单文本扫描器.简而言之,Scanner类的功能:可以实现键盘输入数据,到程序当中. 例如,以下代码使用户能够从 System.in 中读取一个数. ...
- VIJOS-P1167 南蛮图腾
洛谷 P1498 南蛮图腾 洛谷传送门 JDOJ 1325: VIJOS-P1167 南蛮图腾 JDOJ传送门 Description 自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少 ...
- Android开发笔记:Android开发环境搭建
基于Eclipse开发 1. 安装JDK 首先进入JDK下载页面,选择需要的版本下载安装. JDK 下载地址:https://www.oracle.com/technetwork/java/javas ...
- python中append的使用
没有系统地学习过python,最近在append的使用上遇到了大问题,吃到了苦头 之前一直单纯地认为通过append把数添加到list中,不需要提前开空间,非常便利,但却没有意识到这个过程并不是值传递 ...
- java之位运算符
整型转二进制:Integer.toBInaryString(6) <<:左移,3<<2 = 3*2*2 = 12 >>:右移,3>>1 = 3/2 = ...
- golang和swoole区别
golang和swoole区别 开发效率 Go语言是本质上是静态语言,开发效率稍差,但性能更强,更适合底层软件的开发 Swoole使用PHP语言,动态脚本语言,开发效率最佳,更适合应用软件的开发 IO ...
- 【Linux命令】文本文件编辑命令10个(cat、more、less、head、tail、tr、wc、stat、cut、diff)
目录 cat查看文档 more可分页查看文档 less相比较more功能更强大 head查看文档的前N行 tail查看文档的后N行或试试刷新查看 tr替换文本字符 wc统计文本行数 stat查看文档存 ...