首页
下载
关于
Search
1
Dependency check配置本地数据库mysql
40 阅读
2
开源防病毒引擎ClamAV
34 阅读
3
制作qcow2格式镜像
33 阅读
4
n2n内网穿透保姆教学
30 阅读
5
Go实现加班通知你老婆的脚本
26 阅读
日常记录
网络安全
Python
运维
Go
登录
Search
标签搜索
Python
算法
Go
定时任务
AiiCi
累计撰写
9
篇文章
累计收到
75
条评论
今日撰写
0
篇文章
首页
导航栏
日常记录
网络安全
Python
运维
Go
页面
下载
关于
用户登录
登录
搜索到
2
篇与
Go
的结果
2024-05-24
Go每日一练之切片&数组去重复
描述Go中没有像Python那样的集合函数,可以很快捷的进行去重操作,但实际应用中常常会遇到需要去重的时候。切片场景1:已经存在的一个切片要去掉其中重复的内容。一般使用map来进行辅助,map的键可以存储切片中的元素,值设置为布尔类型。示例代码如下:func removeDuplicates(slice []int) []int { //使用map来记录出现过的元素 seen := make(map[int]bool) //创建一个无重复的元素切片 unique := []int{} //遍历原始切片 for _,value := range slice{ if _,ok :=seen[value];!ok{ //如果元素没有出现过,就添加到map和新切片中 seen[value]=true unique = append(unique,value) } } return unique }场景2:在进行爬虫操作的时候,用正则表达式获取到的字符串,想要去掉重复的内容。可以通过定义个containers函数进行辅助,如果这个字符串已经在这个数据中则不进行存储。示例代码如下:func containers(selice []string,target string) bool{ for _,value := range selice{ if value == target{ return true } } return false }数组在Go中处理数组去重有点不同于处理切片,因为数组的大小在声明时就已经固定,无法动态改变。可以通过创建一个新的切片来存放数组中的唯一元素,然后返回这个切片,实际操作和切片差不多,需求注意的就是长度也是数组的一部分。示例代码:func removeDuplicatesArr(arr [5]int) []int{ seen := make(map[int]bool) unique := []int{} for _,value := range arr{ if _,ok := seen[value]; !ok{ seen[value]=true unique=append(unique,value) } } return unique }拓展1:数组/切片中找到重复元素所在的索引。思路:要找出数组中重复元素的位置,可以利用map来存储每个元素第一次出现的位置,同时检查元素是否已经出现过。如果发现一个元素已经记录在map中,就可以将其位置记录到切片中。func findDuplicates(arr []int) map[int][]int{ positions := make(map[int][]int) seen :=make(map[int]int) for index,value := range arr{ if firstIndex,found := seen[value];found { //如果元素已经出现过,将其位置添加到positions中 if _,exists := positions[value];exists{ positions[value]=append(positions[value],index) }else{ positions[value]=[]int{firstIndex,index} } }else{ //记录元素第一次出现的位置 seen[value] = index } } return positions }在这个示例中,findDuplicates函数接受一个整数数组,并返回一个map,其中键是数组中的重复元素,值是这些元素出现的所有位置的切片。函数首先遍历数组,记录每个元素首次出现的位置。如果元素已经出现过,就更新该元素在positions中的位置列表。拓展2:找出数组中重复元素并统计其个数。func countDuplicates(arr []int) map[int]int { countMap := make(map[int]int) for _, value := range arr { // 每遇到一个元素,就在其对应的计数上加1 countMap[value]++ } // 可选: 移除只出现一次的元素 for key, count := range countMap { if count == 1 { delete(countMap, key) } } return countMap }
2024年05月24日
18 阅读
0 评论
0 点赞
2024-05-16
Go实现加班通知你老婆的脚本
思路与设计:使用 github.com/robfig/cron 包创建两个定时任务,一个用于加班提醒,一个用于下班提醒。加班提醒定时任务在指定时间发送加班提醒信息。下班提醒定时任务在指定时间发送下班提醒信息。使用第三方短信服务发送信息,这里假设使用 Twilio 服务。代码实现:package main import ( "fmt" "log" "time" "github.com/robfig/cron" "github.com/sfreiberg/gotwilio" ) // Twilio账号信息 const ( AccountSid = "your_account_sid" AuthToken = "your_auth_token" YourNumber = "+1234567890" // 你的Twilio电话号码 ReceiverNum = "+1234567890" // 接收提醒信息的电话号码 ) // 发送提醒信息 func sendReminderMessage(message string) { twilio := gotwilio.NewTwilioClient(AccountSid, AuthToken) _, exception, err := twilio.SendSMS(YourNumber, ReceiverNum, message, "", "") if err != nil || exception != nil { log.Fatalf("Error sending SMS: %v, Exception: %v", err, exception) } fmt.Println("提醒信息已发送!") } // 发送加班提醒信息 func sendOvertimeMessage() { message := "加班提醒:今天加班记得注意身体,辛苦了!" sendReminderMessage(message) } // 发送下班提醒信息 func sendOffWorkMessage() { message := "下班提醒:下班时间到啦,记得安全回家哦!" sendReminderMessage(message) } func main() { // 创建定时任务调度器 c := cron.New() // 加班提醒定时任务,每天晚上18:00执行 c.AddFunc("0 18 * * *", sendOvertimeMessage) // 下班提醒定时任务,每天晚上19:00执行 c.AddFunc("0 19 * * *", sendOffWorkMessage) // 启动定时任务调度器 c.Start() // 程序运行,阻塞主 goroutine select {} }注:Twilio是要花钱的,所以请确保用户余额。
2024年05月16日
26 阅读
12 评论
0 点赞