Go语言中文网 为您找到相关结果 46

golang定时任务详解

在程序中经常需要按照指定的周期(以毫秒计)来调用函数或计算表达式,也即实现定时任务,使用time包中Tick和Sleep可以轻松实现定时任务 使用Tick每隔100毫秒打印“Hello TigerwolfC” for range time.Tick(time.Millisecond*100){ fmt.Println("Hello TigerwolfC") } 每隔100毫秒打印 “Hello TigerwolfC”,也可以使用 time.Sleep() for{ time.Sleep(time.Millisecond* 100) fmt.Println("Hello TigerwolfC") } 每隔5秒执行f()函数 c := time.Tick(5 * time.Second) for...阅读全文

博文 2019-02-24 19:34:43 不屈真实

Go实战--golang中执行cron job定时任务(robfig/cron和jasonlvhit/gocron)

生命不止,继续 go go go !!! 今天,跟大家分享的是在golang中执行定时任务,主要介绍两个github上的开源库的使用。 Linux下crontab crontab 命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。 该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。 该词来源于希腊语chronos(χρόνος),原意是时间。 通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。 crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的cr...阅读全文

博文 2017-09-08 08:31:02 wangshubo1989

Go 数字转字符串,字符串转数字, 枚举

数字转字符串,字符串转数字 package main import ( "fmt" "strconv" ) func main() { // 80 转换成 "80" //number := 80 // //number_int :=strconv.Itoa(number) // //fmt.Println(number_int) //fmt.Printf("%T", number_int) // 如果不用这种的,可能转出来的不是你想象中的那样 //number := 80 // //number_str := string(number) // //fmt.Println(number_str) // number_str = P, 对应到了相应的ascci码上了 //fmt.Printf(...阅读全文

博文 2019-04-07 17:35:10 听砜

golang time 格式详解

神奇时刻:2006-01-02 15:04:05 1 官方文档 time package(需科学上网查看):https://golang.org/pkg/time/ 2 自定义时间格式 在看代码之前,先问一个关键问题:你懂 2006-01-02 15:04:05 么?不懂还是看代码吧! package main import ( "fmt" "time" ) func main() { // 使用系统默认格式打印当前时间 t1 := time.Now(); fmt.Println("t1:", t1) // 自定义格式,相当于Java中的时间格式:yyyy-MM-dd HH:mm:ss t2 := t1.Format("2006-01-02 15:04:05") fmt.Println("t...阅读全文

博文 2018-10-10 21:34:45 银冰雪千载

使用 fasthttp 时要注意的两个点

#我们做的是聚合支付系统,使用的是fasthttp 作为http server, http client 也是使用fasthttp ### 1. 第一个问题出现的场景是我们使用fasthttp client 请求微信支付时报了这个err ErrConnectionClosed ``` the server closed connection before returning the first response byte Make sure the server returns 'Connection: close' response header before closing the connection ``` ![image.png](http://upload-images.jian...阅读全文

博文 2017-12-16 13:45:41 Bulesxz

Go语言_时间篇

Go的time包是标准库中的包之一 不用说,几乎是开发必须用到的包之一。time包的说明文档在: http://golang.org/pkg/time/ 先注意下Overview中的一句话: The calendrical calculations always assume a Gregorian calendar. 这个包的时间计算式是基于格里历,就是我们使用的公历。关于格里历的历史,可以看百度百科: http://baike.baidu.com/view/391054.htm 看看godoc文档,最大的数据类型就是Time了,这个Time类型最微小可以表示到nanosecond(微毫秒,十亿份之一秒)。 Time的比较是使用Before,After和Equal方法。看一眼After: ...阅读全文

golang定时任务踩坑及终极解决方案

前言 国庆闲来无事,把之前开源的一个定时任务调度中心重构了一下。 期间遇到了一些crontab的坑 CronTab 我们来看一下crontab的时间格式, Spec参考beego toolbox模块下的crontab的组成格式: //前6个字段分别表示: // 秒钟:0-59 // 分钟:0-59 // 小时:1-23 // 日期:1-31 // 月份:1-12 // 星期:0-6(0 表示周日) //还可以用一些特殊符号: // *: 表示任何时刻 // ,: 表示分割,如第三段里:2,4,表示 2 点和 4 点执行 // -:表示一个段,如第三端里: 1-5,就表示 1 到 5 点 // /n : 表示每个n的单位执行一次,如第三段里,*/1, 就表示每隔 1 个小时执行一次命令。也可以...阅读全文

博文 2019-10-07 22:04:37 shenping1916

golang 通过(Google Authenticator)实现动态口令

golang 通过(Google Authenticator)实现动态口令 Google Authenticator,是谷歌推出的一款动态口令工具,解决大家的google账户遭到恶意攻击的问题;许多安全性比较高的网站都会采用这种工具来验证登录或者交易;这个动态口令就是Google身份验证器每隔30s会动态生成一个6位数的数字。它的作用是:对你的账号进行“二步验证”保护,或者说做一个双重身份验证,来达到提升安全级别的目的。 通过 一致算法保持手机端和服务端相同,并每30秒改变认证码。 方法说明 GetSecret() :获取秘钥(32位字符串) GetCode() :获取动态码 GetQrcode() :获取动态码二维码内容 GetQrcodeUrl() :获取动态码二维码图片地址 Verif...阅读全文

博文 2020-01-01 02:32:53 谁不曾年少轻狂过

请问类似游戏同步玩家移动位置的实现方法

是这样最近在做一个服务器同步玩家移动位置和转向的demo,服务器用go客户端用unity,使用TCP,数据发送用protobuf。因为之前没接触过golang所以磕磕绊绊遇到了很多坑。在即将完成的时候发现了一个问题就是几个玩家之间的移动数据接收很不流畅。 一开始以为是服务器的问题,因为每个玩家每隔100毫秒就要发送一次自己的位置和旋转信息,怕是服务器处理不过来。后来加了日志之后发现服务器回传同步都没有什么问题。那可能问题就出在客户端。后来发现可能是玩家每100毫秒接收到服务器同步过来所有其他玩家信息处理不过来,因为接收到之后还需要分包,反序列化数据,根据消息头调用具体方法。所以当有多个客户端之后服务器发回来的包肯定也更大。这里我现在再想办法解决。 但是因为对网络编...阅读全文

Golang之wait.Until 简单测试用例

测试目的,验证wait.Until的用法 //测试wait.Until() 的用途 package main import ( "fmt" "k8s.io/apimachinery/pkg/util/wait" "time" ) type stop struct { } func main() { stopCh := make(chan struct{}) //初始化一个计数器 i := 0 go wait.Until(func() { fmt.Printf("----%d----\n", i) i++ }, time.Second, stopCh) time.Sleep(time.Second * 10) stopCh <- stop{} // 下面的形式,也是可以的 //stopCh <...阅读全文

博文 2018-07-02 21:35:46 故新

golang 高性能定时器之最小堆实现

业务中有很多定时任务,在规定时间内,不管是否完成都需要回调,明显,这种需要实现定时器,比较好的是时间轮和最小堆。这里介绍最小堆实现,这里就是个变相的topN 问题。 该文章后续仍在不断的更新修改中, 请移步到原文地址http://www.dmwan.cc/?p=146 由于是项目中要使用,不能仅考虑最小堆就完事,需要添加几条特性,第一个是要用一个timer 实现计时功能,第二个是要有提前删除功能。特别提下第二点,在高并发的情况下,timer 不能让任务自动过期,业务成功的情况下,要能提前删除,否则,timer压力会越来越大; 项目github地址:https://github.com/caucy/timeloop。 调用示例: package main import ( "os" "fmt"...阅读全文

博文 2018-06-01 15:33:07 鼎铭

go语言的time包

go语言的time包 组成 time.Duration(时长,耗时) time.Time(时间点) time.C(放时间点的管道)[ Time.C:=make(chan time.Time) ] time包里有2个东西,一个是时间点,另一个是时长 时间点的意思就是“某一刻”,比如 2000年1月1日1点1分1秒 那一刻(后台记录的是unix时间,从1970年开始计算) 时长就是某一刻与另一刻的差,也就是耗时 函数 Sleep函数 time.Sleep(time.Duration) 表示睡多少时间,睡觉时,是阻塞状态 fmt.Println("start sleeping...") time.Sleep(time.Second) fmt.Println("end sleep.") //【结果】...阅读全文

博文 2014-10-04 19:26:01 waynehu

golang中Ticker的使用

// code_048_Ticker project main.go package main import ( "fmt" "time" ) //Ticker是一个定时触发的计时器, //它会以一个间隔(interval)往channel发送一个事件(当前时间), //而channel的接收者可以以固定的时间间隔从channel中读取事件。 func main() { ////创建定时器,每隔1秒后,定时器就会给channel发送一个事件(当前时间) ticker := time.NewTicker(time.Second * 1) i := 0 go func() { for { //循环 <-ticker.C i++ fmt.Println("i =", i) if i == 5 { ...阅读全文

博文 2018-10-08 17:35:50 ck_god

Pokemon Go 反伪造GPS机制的探讨

免责声明:本文只是从技术的角度去探讨游戏当中的缺陷,任何组织与个人不得利用本文中的内容从事非法活动,请不要传播或利用本文中提到的漏洞,否则后果自负。 Pokemon Go是最近比较流行的基于AR和LBS的收集向游戏,老牌IP号召了一票玩家。游戏目前bug较多,这里讨论的是0.29.0版本以及在安卓平台下的反mock GPS的机制。 在未阅读过源码之前,一下的分析都基于实际测试结果,也就是黑盒测试。 目前已知的情报有: 1.游戏中存在检测伪造gps信息的机制,目前来看是只在客户端,至于服务端有没有无从而知 2.当游戏检测到用户正在使用mock gps之类的软件的时候会显示“failed to detect location”之类的字样,并终止与服务器端的交互 3.重启游戏可以解决上述问题 4....阅读全文

博文 2016-09-10 11:00:00 ytx1991

用golang实现一个简单的监控工具

背景是这样的,有一次我的服务器突然挂掉了,是由于cpu占用过高,但是我又不知道是哪个进程造成的。于是便想找一个监控工具来监控我的机器,我希望这个工具足够简单,没有复杂的配置,开箱即用,能够监控到当cpu负载过高时,发生的时间以及当时是什么进程造成这样的问题。很可惜,我并没有找到这样的工具(若有这样方便的工具请告知我),但我实在不想因此而给服务器上一套很重的监控系统。于是乎,我决定自己写一个工具。思路如下: 每隔一段时间就查看cpu占用率,当超过了设置的百分比,就触发记录; 调用top命令,按照cpu占用率从高到低排列,将输出记录到文件中,文件以时间命令; 程序能后台运行。 针对第一点,我用了一个库:github.com/shirou/gopsutil,里面有关于cpu使用率以及内存使用率的相...阅读全文

博文 2020-04-22 16:33:38 wx5e1abbbb0a5e5

Go实现滑动窗口限频及测试

各类限频原理 网上有很多讲解限频原理以及限频原因的,限频常用在接口、服务的流量、并发上,主要是为了合理使用后端资源,防止后端被压垮,雪崩等等。 实现方法 这里使用使用go的ring(环形队列)实现滑动窗口 实现代码 package main import ( "fmt" "net" "os" "container/ring" "sync/atomic" "sync" "time" ) var ( limitCount int = 10 // 6s限频 limitBucket int = 6 // 滑动窗口个数 curCount int32 = 0 // 记录限频数量 head *ring.Ring // 环形队列(链表) ) func main() { tcpAddr, err := net...阅读全文

博文 2020-02-17 20:32:43 allenxguo

golang cron 定时任务

最开始接触定时任务的概念是在大二的一个计算机操作系统设计的实验课上,当时老师给了五个任务要求,自己任选三个小组完成。 依稀还记得当时有个作业的任务需要每隔一段时间就执行一次:上百度就了解到了这样要给命令:crontab,这个命令可以设定在后台定时跑一个脚本。 如果对这个命令比较感兴趣或者有这样一个需求,可以参考:在linux上定期执行命令、脚本(cron,crontab,anacron) cron 功能 在Golang中也有这样一个工具的封装。提一下cron主要能干什么: 比如我们手机里面设置的闹钟,我们可以设置成每天早上7:00,每周周一到周三晚上一点,我们可以把cron形象的看作一个闹钟,会在我们规定的时间自动执行一些我们设置好的动作。 作为一个大学生,你可能追求过某某女孩子,你可能有这...阅读全文

博文 2019-02-22 16:34:50 _AlphaBaby_

Go中的time操作

程序开发中,时间操作是不可避免的,在这里记录一下Go中常见的操作。 Duration Go中的时间最底层的数据结构为Duration, 在Duration的基础上,我们定义了下面的概念: const ( Nanosecond Duration = 1 // 纳秒,计算Duration的是使用ns Microsecond = 1000 * Nanosecond 微秒,计算Duration的是使用us Millisecond = 1000 * Microsecond 毫秒, 计算Duration的是使用ms Second = 1000 * Millisecond 秒,计算Duration的是使用s Minute = 60 * Second 分,计算Duration的是使用m Hour = 60 ...阅读全文

博文 2020-02-25 11:34:32 大漠胡萝卜

拆轮子系列:go的流式处理库go-streams

由于某些原因需要做点骚操作,需要用到类似于flink中的滑动窗口这样的功能,此时我打开了awesome-go上去瞄瞄,看看有没有开源的实现,然后就发现了这篇文章的主角go-streams这个库。 go-streams是什么 一个流式处理库,提供一种简单,简洁的方式构建数据处理的管道。 image.png pipeline流水线处理的需求点有哪些 pipeline流水线处理模式对于解决问题的建模是将任务分为多个依次执行的处理步骤,步骤间通过传输数据相关联:一个步骤的输出是下一个步骤的输入。可以用生产者消费者模型来理解,上游生产数据,下游消费数据,golang当中的goruntine和channel非常适合实现,每一步处理都开一个或多个goruntine,通过channel来连接不同的步骤的go...阅读全文

Golang cron 定时任务使用

1、cron 表达式的基本格式 用过 linux 的应该对 cron 有所了解。linux 中可以通过 crontab -e 来配置定时任务。不过,linux 中的 cron 只能精确到分钟。而我们这里要讨论的 Go 实现的 cron 可以精确到秒,除了这点比较大的区别外,cron 表达式的基本语法是类似的。(如果使用过 Java 中的 Quartz,对 cron 表达式应该比较了解,而且它和这里我们将要讨论的 Go 版 cron 很像,也都精确到秒) cron(计划任务),顾名思义,按照约定的时间,定时的执行特定的任务(job)。cron 表达式 表达了这种约定。 cron 表达式代表了一个时间集合,使用 6 个空格分隔的字段表示。 字段名 是否必须 允许的值 允许的特定字符 秒(Seco...阅读全文

博文 2020-01-09 11:32:44 解落秋叶

golang的缓冲channel简单使用

# golang的缓冲channel简单使用 ---- 我们常用的是无缓冲channel : ```go make(chan type) ``` 其实make() 创建chan的第二个参数可设置缓冲channel的大小。 上述语句等价于 make(chan type, 1) 即创建了一个缓冲区大小为1channel 下面看有缓冲channel的两个例子. ### 阻塞型 demo : 协程1 :每隔1s 往有10个缓冲的channel里面写一条msg, 协程2:每隔3s 取一条msg, ```go package main import( //"fmt" "time" "strconv" log "github.com/astaxie/beego/logs" ) func main() { ...阅读全文

博文 2019-06-29 22:39:51 BethlyRoseDaisley

golang定时任务jakecoffman/cron包的使用

cron定时任务使用"github.com/jakecoffman/cron"包 func conDemo() { spec := "*/5 * * * * ?" //每5s执行一次 cronJob := cron.New() //cronJob.RemoveJob()//要删除任务使用这个方法 cronJob.AddFunc(spec, conFun, "cronFun") cronJob.Start() } func conFun() { fmt.Println("this is conFun Test") } 以上是每5秒打印一次this is conFun Test 时间的定义信息: 字段名 是否必须 允许的值 允许的特定字符 秒(Seconds) 是 0-59 * / , - 分(...阅读全文

博文 2017-11-14 07:03:07 迷路的阿修罗

golang定时器函数

tick := time.Tick(1 * time.second)表示每隔一段生产一条数据到tick通道中。boom := time.After(500 * time.Millisecond)表示在一段时间之后产生一条数据到tick通道中,不会持续产生。func timetick() { tick := time.Tick(100 * time.Millisecond) boom := time.After(500 * time.Millisecond) for { select { case <-tick: fmt.Println("tick.") case <-boom: fmt.Println("BOOM!") return default: fmt.Println(" .") ti...阅读全文

博文 2016-10-06 10:00:01 e421083458

golang调度中心kala测试

前言 kala是go版本类crontab调度的服务,默认存储bolt,用redis存储时有点问题,密码为空会抛异常,修改了kala\job\storage\redis\redis.go增加了无密的方法。。 func Newnopass(address string) *DB { conn, err := redis.Dial("tcp", address) if err != nil { log.Fatal(err) } return &DB{ conn: conn, } } 对参数中密码为默认或者空的调用该方法,否则建立连接的时候redis.DialOption生成空结构体在redigo.Dial时会引起panic: runtime error: invalid memory addres...阅读全文

博文 2017-06-08 12:07:15 飞天神猫

使用golang开发mqtt服务压力测试工具

最近公司项目需要优化mqtt服务,为了更全面的测试mqtt服务性能模拟正式环境,这里使用golang的写了一个测试工具 代码如下: package main import ( "flag" "fmt" "sync" "time" //导入mqtt包 MQTT "github.com/eclipse/paho.mqtt.golang" ) var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) { fmt.Printf("TOPIC: %s\n", msg.Topic()) fmt.Printf("MSG: %s\n", msg.Payload()) } var fail_nums int = 0 func ...阅读全文

博文 2019-03-08 11:34:42 weylau

四段代码入门Go协程以及channel!

写一个简单的程序,使得一个协程用来向channel中写如数据,一个用来读取数据。 import ( "fmt" "strconv" "testing" ) /** 在这个示例中,我们有 - 一个message作为channel - 一个协程用来发送消息 - 主协程用来接收消息 */ func Test_message(t *testing.T) { /** 声明一个长度为 1 的channel */ messages := make(chan string) /** 该协程负责向channel发送数据,共发送五次 */ go func() { for i := 0; i < 5; i++ { messages <- "Hello, 这是第 " + strconv.Itoa(i) + " 次传...阅读全文

博文 2019-05-17 20:34:37 fishBugs

go任务调度2(linux的cron调用)

cron格式:分 时 日 月 周 每隔5分钟执行1次: /5 * echo hello > /tmp/x.log 每隔1-5分钟执行1次: 1-5 echo hello > /tmp/x.log 每天10点整、22点整执行1次: 0 10,22 * echo hello > /tmp/x.log 每隔1-5分钟执行1次: 1-5 echo hello > /tmp/x.log Parse():解析与校验Cron表达式Next():根据当前时间,计算下次调度时间 package main import ( "fmt" "github.com/gorhill/cronexpr" "time" ) func main() { var ( expr *cronexpr.Expression err ...阅读全文

博文 2019-04-19 18:35:13 梁十八

Golang 游戏leaf系列(六) time模块 cron表达式

一、cron表达式 cron表达式详解,cron表达式写法,cron表达式例子 cron表达式,主要用于定时作业(定时任务)系统定义执行时间或执行频率的表达式。Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month DayofWeek Year或 Seconds Minutes Hours DayofMonth Month DayofWeek 从右边看,就是年+周几+月日时分秒 1.例子 0 0 3 * * ? 每天3点执行 0 5/10 3 * * ?,每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行,/ 符号前表示开始时间...阅读全文

博文 2019-05-30 21:34:50 懒皮

k8s 中定时任务的实现

k8s 中有许多优秀的包都可以在平时的开发中借鉴与使用,比如,任务的定时轮询、高可用的实现、日志处理、缓存使用等都是独立的包,可以直接引用。本篇文章会介绍 k8s 中定时任务的实现,k8s 中定时任务都是通过 wait 包实现的,wait 包在 k8s 的多个组件中都有用到,以下是 wait 包在 kubelet 中的几处使用: func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, stopCh <-chan struct{}) (err error) { ... // kubelet 每5分钟一次从 apiserver 获取证书 closeAllConns, err := kubeletcertificate....阅读全文

博文 2019-02-16 21:34:43 田飞雨

Golang入门-时间处理

获取当前时间 import time func getCurTime() { // 本地时间(如果是在中国,获取的是东八区时间) curLocalTime := time.Now() // UTC时间 curUTCTime := time.Now().UTC() fmt.Println(curLocalTime, curUTCTime) } 复制代码设置时区 func setTimeZone() { curLocalTime := time.Now() curUtcTime := curLocalTime.In(time.UTC) fmt.Println(curUtcTime) } 复制代码时间类型转字符串: Format函数 func time2TimeStr() { localTimeS...阅读全文

博文 2020-01-14 10:34:24 言淦

go example之旅(下)

Introduce 这是来自于go by example的例子,花了几天的时间写完了这些例子,感觉对我的帮助很大,对于初学者来说,我的建议还是先找本go的书从头到尾看一下,然后再来看这些例子,每个例子都手敲一遍,对你的帮助还是很大的。在敲这些例子的过程中,有一些疑问,也有一些知识的扩充,因此总结了本文。 time和channel golang的time package带有定时器的功能,而定时器和channel完美融合,创建一个定时器会返回一个channel,在定时器到期之前读这个channel是阻塞的,直到定时时间到达这个channel就会变成可读的。 func main() { //创建了一个定时器,2秒后会发送事件到timer1.C channel timer1 := time.NewT...阅读全文

博文 2016-08-23 03:00:01 zhangyifei216

TiKV 源码解析系列——如何使用 Raft

TiKV 源码解析系列——如何使用 Raft 本系列文章主要面向 TiKV 社区开发者,重点介绍 TiKV 的系统架构,源码结构,流程解析。目的是使得开发者阅读之后,能对 TiKV 项目有一个初步了解,更好的参与进入 TiKV 的开发中。需要注意,TiKV 使用 Rust 语言编写,用户需要对 Rust 语言有一个大概的了解。另外,本系列文章并不会涉及到 TiKV 中心控制服务 Placement Driver(PD) 的详细介绍,但是会说明一些重要流程 TiKV 是如何与 PD 交互的。TiKV 是一个分布式的 KV 系统,它采用 Raft 协议保证数据的强一致性,同时使用 MVCC + 2PC 的方式实现了分布式事务的支持。 概述 本文档主要面向 TiKV 社区开发者,主要介绍 TiKV...阅读全文

博文 2017-02-10 02:38:50 PingCAP

时序数据库 InfluxDB(六)

相关文章:时序数据库 InfluxDB(一)时序数据库 InfluxDB(二)时序数据库 InfluxDB(三)时序数据库 InfluxDB(四)时序数据库 InfluxDB(五)时序数据库 InfluxDB(六) CQ 连续查询 连续查询 Continuous Queries( CQ )是 InfluxDB 很重要的一项功能,它的作用是在 InfluxDB 数据库内部自动定期的执行查询,然后将查询结果存储到指定的 measurement 里。 配置文件中的相关配置: [continuous_queries] enabled = true log-enabled = true query-stats-enabled = false run-interval = "1s" enabled = ...阅读全文

博文 2019-11-06 11:32:47 rife

Go_20: Golang 中 time 包的使用

time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1. 时间常量(时间格式化) const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 M...阅读全文

博文 2017-10-01 14:30:01 liang1101

go example之旅(下)

Introduce 这是来自于go by example的例子,花了几天的时间写完了这些例子,感觉对我的帮助很大,对于初学者来说,我的建议还是先找本go的书从头到尾看一下,然后再来看这些例子,每个例子都手敲一遍,对你的帮助还是很大的。在敲这些例子的过程中,有一些疑问,也有一些知识的扩充,因此总结了本文。 time和channel golang的time package带有定时器的功能,而定时器和channel完美融合,创建一个定时器会返回一个channel,在定时器到期之前读这个channel是阻塞的,直到定时时间到达这个channel就会变成可读的。 func main() { //创建了一个定时器,2秒后会发送事件到timer1.C channel timer1 := time.NewT...阅读全文

博文 2016-08-30 01:00:05 zhangyifei216

go example之旅(下)

Introduce 这是来自于go by example的例子,花了几天的时间写完了这些例子,感觉对我的帮助很大,对于初学者来说,我的建议还是先找本go的书从头到尾看一下,然后再来看这些例子,每个例子都手敲一遍,对你的帮助还是很大的。在敲这些例子的过程中,有一些疑问,也有一些知识的扩充,因此总结了本文。 time和channel golang的time package带有定时器的功能,而定时器和channel完美融合,创建一个定时器会返回一个channel,在定时器到期之前读这个channel是阻塞的,直到定时时间到达这个channel就会变成可读的。 func main() { //创建了一个定时器,2秒后会发送事件到timer1.C channel timer1 := time.NewT...阅读全文

博文 2016-08-22 23:00:01 zhangyifei216

go example之旅(下)

Introduce 这是来自于go by example的例子,花了几天的时间写完了这些例子,感觉对我的帮助很大,对于初学者来说,我的建议还是先找本go的书从头到尾看一下,然后再来看这些例子,每个例子都手敲一遍,对你的帮助还是很大的。在敲这些例子的过程中,有一些疑问,也有一些知识的扩充,因此总结了本文。 time和channel golang的time package带有定时器的功能,而定时器和channel完美融合,创建一个定时器会返回一个channel,在定时器到期之前读这个channel是阻塞的,直到定时时间到达这个channel就会变成可读的。 func main() { //创建了一个定时器,2秒后会发送事件到timer1.C channel timer1 := time.NewT...阅读全文

博文 2016-10-14 08:00:05 zhangyifei216

Go关键字--go

友情推广 go 轻松开启高并发,一直都是golang语言引以为豪的功能点。golang通过goroutine实现高并发,而开启goroutine的钥匙正是go关键字。开启并发执行的语法格式是: go funcName() 在调用函数后,只需要在被调用的函数前边加上go关键字,就可以轻松的开启并发执行。下边请看示例代码: package main import ( "fmt" "time" ) // goroutine1 函数,循环内部每隔一秒钟打印一次总共执行次数 func goroutine1() { var idx = 0 for { idx++ fmt.Println("goroutine 1,执行第", idx, "次") // 睡眠等待1秒 time.Sleep(time.Seco...阅读全文

博文 2019-02-06 17:31:04 hzwy23

cron基本使用

摘自:https://blog.csdn.net/skh2015...cron表达式共有六个域,*.*.*.*.*.*分别表示Seconds,Minutes,Hours,DayofMonth,Month,DayofWeek 基本格式 字段名 是否必须 允许的值 允许的特定字符 秒(Seconds) 是 0-59 * / , – 分(Minutes) 是 0-59 * / , – 时(Hours) 是 0-23 * / , – 日((Day of month) 是 1-31 * / , – ? 月((Month) 是 1-12 or JAN-DEC * / , – 星期(Day of week) 否 0-6 or SUM-SAT * / , – ? 1)月(Month)和星期(Day of w...阅读全文

博文 2018-11-08 18:34:41 pengj

Go 每日一库之 gron

简介 gron是一个比较小巧、灵活的定时任务库,可以执行定时的、周期性的任务。gron提供简洁的、并发安全的接口。我们先介绍gron库的使用,然后简单分析一下源码。 快速使用 先安装: $ go get github.com/roylee0704/gron 复制代码后使用: package main import ( "fmt" "sync" "time" "github.com/roylee0704/gron" ) func main() { var wg sync.WaitGroup wg.Add(1) c := gron.New() c.AddFunc(gron.Every(5*time.Second), func() { fmt.Println("runs every 5 secon...阅读全文

博文 2020-04-21 11:34:14 darjun

golang time包的断续器time.ticker

断续器会在时间到期后立即进入下一个周期并等待再次到达,直到停止。断续器传达到通知的默认途径是它的字段C,是一个channel,容量为1 先看代码 package main import ( "fmt" "time" ) func main() { intchan := make(chan int, 1) ticker := time.NewTicker(time.Second) go func() { for _ = range ticker.C { select { case intchan <- 1: case intchan <- 2: case intchan <- 3: } } fmt.Println("end sender") }() var sum int for e := r...阅读全文

博文 2019-03-27 00:34:40 memory_89a7

log4go的精确定时程序(带自动延迟补偿)

程序设计目标是在程序启动10秒后执行某个任务,例如日志转储(rotate),以后每隔15秒执行一次。 初次的设计 package main import ( "time" "fmt" ) func main() { timer := time.NewTimer(10 * time.Second) fmt.Println(time.Now()) for { select { case <-timer.C: fmt.Println(time.Now()) time.Sleep(1 * time.Second) timer.Reset(15 * time.Second) } } } 显然,在设置下一个定时(timer.Reset(15 * time.Second))之前,多少都会消耗一点时间,即使...阅读全文

博文 2017-07-22 19:00:02 ccpaging

{区块链教程}以太坊源码分析fast sync算法二

兄弟连区块链教程以太坊源码分析fast sync算法二:上面的表格应该这样解释:如果我们每隔K个区块头验证一次区块头,在N个区块头之后,伪造的概率小于攻击者产生SHA3冲突的概率。这也意味着,如果确实发现了伪造,那么最后的N个头部应该被丢弃,因为不够安全。可以从上表中选择任何{N,K}对,为了选择一个看起来好看点的数字,我们选择N = 2048,K = 100。后续可能会根据网络带宽/延迟影响以及可能在一些CPU性能比较受限的设备上运行的情况来进行调整。 Using this caveat however would mean, that the pivot point can be considered secure only after N headers have been impor...阅读全文

博文 2018-10-26 16:34:48 兄弟连区块链培训

Timer, Ticker的区别引出变量的逃逸情况.引发的思考

Timer Timer 定义后固定只执行一次,使用Reset会再触发一次. timer := time.NewTimer(time.Second) //Timer 定义后固定只执行一次,使用Reset会再触发一次. //Timer的实现 go func(t *time.Timer) { for { select { case <-t.C: fmt.Println("timer:", 22) t.Reset(time.Second) } } }(timer) Ticker Ticker一但被定义, 每隔一段时间会自动触发 ticker := time.NewTicker(time.Second) //Ticker一但被定义, 每隔一段时间会自动触发. //Ticker的实现 go func(t...阅读全文

博文 2019-08-13 17:32:51 百里

Golang学习笔记-定时器

Timer 使用time.NewTimer()创建Timer后,经过其指定的时间后,它会向其管道发送当前时间。time.After()也是创建Timer,不过返回值不是Timer而是其管道。 package main import ( "fmt" "sync" "time" ) func main(){ //5秒后将当前时间发送给管道 timer:=time.NewTimer(time.Second*2) if t,ok:=<-timer.C;ok{ fmt.Println(t) } //After()内部调用NewTimer()然后返回其管道 timeChan:=time.After(time.Second*2) if t,ok:=<-timeChan;ok{ fmt.Println(t)...阅读全文

博文 2019-12-27 21:33:09 土豆吞噬者