技术阅读周刊,每周更新。
历史更新
Prometheus vs. VictoriaMetrics (VM) | Last9
URL: https://last9.io/blog/prometheus-vs-victoriametrics/?ref=dailydev
28 - Rust in Action: 10 Project Ideas to Elevate Your Skills
URL: https://rust-trends.com/newsletter/rust-in-action-10-project-ideas-to-elevate-your-skills/?ref=dailydev
简易版的 grep 命令
简单:读取文件根据搜索条件输出搜索结果,涉及到的技术栈:文件 IO 正则表达式 命令行工具 短域名服务
中等:接收一个长域名,转换为一个短域名,访问短域名时可以自动重定向到长域名。Web 框架 数据存储,可以是 SQLite/Redis 生成短链接的字符串算法 基于文本的冒险游戏
中等:用户可以探索房间,选择物品,解密等。输入输出 游戏结构体定义、以及状态流转。 基本的网络爬虫
简单:爬取一个网页然后提取指定的信息。HTTP HTML 解析 字符串匹配、正则。 实时聊天应用
中等:支持多个人用户加入房间,可以给每个人发送消息。网络编程 多线程处理客户端连接 Markdown 解析为 HTML
中等:文本解析 文件 IO 简单的 HTTP 服务
中等:支持静态文件服务器,也可以处理 RESTful 请求。
Implementing a Bloom Filter in Go | by Francisco Escher | Nov, 2023 | ITNEXT
URL: https://itnext.io/bloom-filters-and-go-1d5ac62557de
布隆过滤器有以下特点:
用极少的内存可以存放大量的数据 存在误报的可能 但返回数据不存在时一定不存在 返回数据存在有一定概率是不存在的
所以基于以上特性就有了下面这些应用场景:
网络安全:可以快速判断 IP 释放在黑名单中 web 缓存:判断请求是否在缓存中 数据库缓存,原理同上 语法检测:一些文本工具可以快速检测你输入的支付是否在字典里,不存在时进行提示 区块链认证 邮件过滤
Mastering Concurrency In Go — With Select, Goroutines, and Channels | by Yair Fernando | Better Programming
URL: https://betterprogramming.pub/concurrency-with-select-goroutines-and-channels-9786e0c6be3c
利用 select 多个 channel,来控制最早完成的线程,同时抛弃其他线程
func quickestApiResponse(functions []*Function) {
var articles []*Article
for _, function := range functions {
function.Run()
}
select {
case googleNewsResponse := <-google:
fmt.Printf("Source: %sn", googleNewsResponse.Source)
articles = googleNewsResponse.Articles
case freeNewsReponse := <-free:
fmt.Printf("Source: %sn", freeNewsReponse.Source)
articles = freeNewsReponse.Articles
}
fmt.Printf("Articles %vn", articles)
}
利用 time.After 返回的 channel,来控制达到超时时间后退出所有的线程
func main() {
ch := make(chan struct{}, 1)
go func() {
fmt.Println("do something...")
time.Sleep(4*time.Second)
ch<- struct{}{}
}()
select {
case <-ch:
fmt.Println("done")
case <-time.After(3*time.Second):
fmt.Println("timeout")
}
}
Context.Withtimeout 来控制超时
ch := make(chan string)
timeout, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
go func() {
time.Sleep(time.Second * 4)
ch <- "done"
}()
select {
case res := <-ch:
fmt.Println(res)
case <-timeout.Done():
fmt.Println("timout", timeout.Err())
}
文章链接:
https://last9.io/blog/prometheus-vs-victoriametrics/?ref=dailydev https://rust-trends.com/newsletter/rust-in-action-10-project-ideas-to-elevate-your-skills/?ref=dailydev https://itnext.io/bloom-filters-and-go-1d5ac62557de https://betterprogramming.pub/concurrency-with-select-goroutines-and-channels-9786e0c6be3c
PS:最近也在更新视频号,也会有一些技术干货,动动小手帮主播点播关注
往期推荐
点分享
点收藏
点点赞
点在看
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...