首页 > 编程语言 >go编程题

go编程题

时间:2024-06-07 16:57:06浏览次数:9  
标签:schedule 编程 interface 任务 jobFunc go ticker start

你正在为一家互联网金融公司的风控部门开发一个风险控制系统。该系统需要定期对一些指标进行检查,
例如客户的逾期还款率、
平台的资金流动情况等,以便及时发现并处理风险。

我们已经为您提供了一个名为schedule的调度器类,该类可以用来执行定期的任务。在这个类中,
我们定义了一个start方法用来启动一个定期任务,以及一个stop方法用来停止一个正在执行的任务。

你的任务是完成start和stop两个方法,要求如下:

start方法应该在一个新的协程中启动定期任务。
任务的执行周期由ticker字段控制,
任务的执行函数由jobFunc字段指定,
函数的参数由jobParams字段提供。
在每个周期开始时,都应该调用jobFunc函数,并向其传递jobParams作为参数。

如果在start方法执行过程中,从stopCh通道收到了一个消息,则应该停止任务,并退出协程。

stop方法应该向stopCh通道发送一个消息,以便让start方法停止执行定期任务。在发送消息后,
应该调用ticker.Stop方法停止定时器。

package main

import (
	"fmt"
	"time"
)

/*

*/

// type callJobFuncWithParams func(jobFunc interface{}, ...params interface{}) // 一个mock方法,用于模拟各种具体操作

type schedule struct {
	stopCh    chan struct{}
	jobFunc   interface{}
	jobParams []interface{}
	ticker    *time.Ticker
	running   bool
}

func newSchedule(period time.Duration, jobFunc interface{}, params ...interface{}) *schedule {
	return &schedule{
		stopCh:    make(chan struct{}),
		jobFunc:   jobFunc,
		jobParams: params,
		ticker:    time.NewTicker(period),
	}
}

// 请完成下面两个函数
func (s *schedule) start() {
	go func() {
		for {
			select {
			case <-s.ticker.C:
				s.jobFunc.(func(params []interface{}))(s.jobParams)
			case <-s.stopCh:
				s.ticker.Stop()
				return
			default:
			}
		}
	}()
}

func (s *schedule) stop() {
	s.stopCh <- struct{}{}
}

func main() {
	sc := newSchedule(time.Second, func(params []interface{}) {
		fmt.Printf("par=%+v\n", params)
	}, 1, 2)
	sc.start()

	time.Sleep(time.Second * 3)
	sc.stop()
}

标签:schedule,编程,interface,任务,jobFunc,go,ticker,start
From: https://www.cnblogs.com/gdut17code/p/18237496

相关文章

  • GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
    Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。今天给小伙伴们带来的是图灵&京东认证的“Python编程入门三剑客”,先看《Python编程从入门到实践》,打好Python入......
  • 程序分享--常见算法/编程面试题:罗马数字转整数
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容,持续上传中。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满......
  • 实验6_C语言结构体、枚举应用编程
    实验任务4#include<stdio.h>#defineN10typedefstruct{charisbn[20];//isbn号charname[80];//书名charauthor[80];//作者doublesales_price;//售价intsales_count;//销售册数}Book;voi......
  • [中文参数] AGFA027R31C2I3V、AGFA027R31C2I3E、AGFA027R31C2E3E、AGFA027R31C2E4X面
    Agilex™FPGA产品组合包含一系列产品,可充分满足每一个技术领域(从边缘到嵌入式系统,再到通信和数据中心)的众多可编辑逻辑需求。在所有这些领域中,数据爆炸导致新产品需求激增,以便移动、处理和存储数据并从中获得可执行的深度分析。这些产品的开发人员需要硬件灵活性来应对不断变化......
  • 如何在 django pytest 中使用现有数据库?
    我为我的API设置了默认模式,并为数据搜索设置了现有模式。这是数据库设置:DATABASES={"default":{"ENGINE":"django.db.backends.postgresql"、"OPTIONS":{"options":"-csearch_path=public"}、"NA......
  • 【JS封装-数组操作】强化编程实践:精选JavaScript函数封装集锦-关于数组操作(数组去重、
    目录数组去重数组快速排序过滤数组映射数组数组扁平化数组求和数组最大值数组最小值数组切片数组乱序(洗牌算法)数组去重/***去除数组中的重复项。*@param{Array}array要去重的数组。*@returns{Array}去重后的数组。*/functionuniqueArray(array......
  • go sync.Once
     来自:https://juejin.cn/post/7088305487753510925解析Golangsync.Once用法和原理ag99202022-04-193,650阅读5分钟 一起养成写作习惯!这是我参与「掘金日新计划·4月更文挑战」的第11天,点击查看活动详情。在此前一篇文章中我们了解了sync.Mutex的原理 Golan......
  • go pool
     来自:sync.Pool原理sync.Pool核心对象有三个New:函数,负责对象初始化Get:获取Pool中的对象,如果Pool中对象不存在则会调用NewPut:将对象放入Pool中NewfuncPool的结构很简单,就5个字段 typePoolstruct{ ... Newfunc()interface{} }......
  • 基于 Go 语言实现的 Ollama 大语言模型框架
    大语言模型在现代人工智能领域中扮演着重要角色。Ollama作为一个轻量级且可扩展的框架,帮助开发者在本地机器上构建和运行这些模型。Ollama简介Ollama是一个简单、可扩展的框架,旨在帮助开发者构建和运行大语言模型。它提供了一个简洁的API,用于创建、运行和管理模型。此外,Olla......
  • go cond
      cond:packagemainimport("fmt""sync""time")funcmain(){varmusync.Mutexcond:=sync.NewCond(&mu)varreadyboolgofunc(){time.Sleep(time.Second)//模拟一些工作......