Comment régler la minuterie en langue Go
Comment définir une minuterie en langage Go : 1. Créez-la via la méthode "time.NewTicker()", où le ticker sera déclenché en fonction de l'intervalle défini 2. Créez-la via la méthode "time ; .NewTimer()", où le minuteur n'exécutera qu'un seul mot ; 3. Utilisez "After()" pour créer.
L'environnement de cet article : Système Windows 7, version Go1.11.2, cet article est applicable à toutes les marques d'ordinateurs.
Recommandé : "Tutoriel Golang"
L'utilisation des minuteries en langage Go
Le langage GO propose trois façons d'utiliser les minuteries dans le package time :
1. 🎜>// A Ticker holds a channel that delivers `ticks' of a clock
// at intervals.
type Ticker struct {
C <-chan Time // The channel on which the ticks are delivered.
r runtimeTimer
}
time.NewTicker() Dans ce type, le ticker sera déclenché en continu selon l'intervalle défini. à moins que l'opération ne soit activement terminée.
minuterie// The Timer type represents a single event.
// When the Timer expires, the current time will be sent on C,
// unless the Timer was created by AfterFunc.
// A Timer must be created with NewTimer or AfterFunc.
type Timer struct {
C <-chan Time
r runtimeTimer
}
time.NewTimer() est créé. Dans ce type, le timer ne sera exécuté qu'une seule fois. Bien entendu, il peut être appelé après l'exécution en appelant timer.Reset. () Faites fonctionner à nouveau la minuterie avec la possibilité de modifier l'intervalle de temps.
// After waits for the duration to elapse and then sends the current time
// on the returned channel.
// It is equivalent to NewTimer(d).C.
// The underlying Timer is not recovered by the garbage collector
// until the timer fires. If efficiency is a concern, use NewTimer
// instead and call Timer.Stop if the timer is no longer needed.
func After(d Duration) <-chan Time {
return NewTimer(d).C
}
Ce qui suit démontre l'utilisation des trois méthodes via le code :
1.Ticker
ticker := time.NewTicker(time.Second * 1) // 运行时长 ch := make(chan int) go func() { var x int for x < 10 { select { case <-ticker.C: x++ fmt.Printf("%d\n", x) } } ticker.Stop() ch <- 0 }() <-ch // 通过通道阻塞,让任务可以执行完指定的次数。
2.Timer
timer := time.NewTimer(time.Second * 1) // timer 只能按时触发一次,可通过Reset()重置后继续触发。 go func() { var x int for { select { case <-timer.C: x++ fmt.Printf("%d,%s\n", x, time.Now().Format("2006-01-02 15:04:05")) if x < 10 { timer.Reset(time.Second * 2) } else { ch <- x } } } }() <-ch
// 阻塞一下,等待主进程结束 tt := time.NewTimer(time.Second * 10) <-tt.C fmt.Println("over.") <-time.After(time.Second * 4) fmt.Println("再等待4秒退出。tt 没有终止,打印出 over 后会看见在继续执行...") tt.Stop() <-time.After(time.Second * 2) fmt.Println("tt.Stop()后, tt 仍继续执行,只是关闭了 tt.C 通道。")
type jobFunc2 func(j *job) type job struct { jf jobFunc2 params map[string]interface{} ch chan int } func NewJob() *job { return &job{ params: make(map[string]interface{}), ch: make(chan int), } } func (j *job) Run(t time.Duration) { ticker := time.NewTicker(time.Second * t) go func() { for { select { case <-ticker.C: j.jf(j) case <-j.ch: fmt.Println("收到结束指令") ticker.Stop() break } } }() } func main() { j := NewJob() j.jf = func(jj *job) { fmt.Println("定时任务执行...", time.Now().Format("15:04:05 2006-02-01"), jj.params) } j.params["p1"] = "第一个参数" j.params["p2"] = 100 j.Run(1) // 阻塞一下,等待主进程结束 tt := time.NewTimer(time.Second * 10) <-tt.C fmt.Println("over.") <-time.After(time.Second * 4) fmt.Println("再等待4秒退出。tt 没有终止,打印出 over 后会看见在继续执行...") tt.Stop() <-time.After(time.Second * 2) fmt.Println("tt.Stop()后, tt 仍继续执行,只是关闭了 tt.C 通道。") }
Enfin, je voudrais ajouter que l'exécution de la tâche se termine via le canal.
// 阻塞一下,等待主进程结束 tt := time.NewTimer(time.Second * 10) <-tt.C fmt.Println("over.") <-time.After(time.Second * 4) fmt.Println("再等待4秒退出。tt 没有终止,打印出 over 后会看见在继续执行...") tt.Stop() <-time.After(time.Second * 2) fmt.Println("tt.Stop()后, tt 仍继续执行,只是关闭了 tt.C 通道。") j.ch <- 0 <-time.After(time.Second * 2) fmt.Println("又等了2秒钟...这两秒钟可以看到 tt 没干活了...")
Lorsque vous écrivez en langage GO, vous devez maîtriser l'utilisation du
canal
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

GO POINTER SYNTAXE ET ATTENDRE DES PROBLÈMES DANS LA BIBLIOTHÈQUE VIPER Lors de la programmation en langage Go, il est crucial de comprendre la syntaxe et l'utilisation des pointeurs, en particulier dans ...

En ce qui concerne le problème des balises de structure personnalisées dans Goland lorsque vous utilisez Goland pour le développement du langage GO, vous rencontrez souvent des problèmes de configuration. L'un d'eux est ...

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

GO Language Slice Index: Pourquoi une tranche à élément unique intercepte-t-elle de l'index 1 sans erreur? En langue GO, les tranches sont une structure de données flexible qui peut se référer au bas ...

Lorsque le programme GO Language est en cours d'exécution, comment faire la distinction entre le mode de débogage et le mode de fonctionnement normal? De nombreux développeurs veulent développer des programmes GO selon différents modes de fonctionnement ...
