Skip to content

Commit ee50127

Browse files
committed
2019-09-29 第 10 期发布
1 parent 32b6298 commit ee50127

File tree

9 files changed

+239
-1
lines changed

9 files changed

+239
-1
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@
1010

1111
# Output of the go coverage tool, specifically when used with LiteIDE
1212
*.out
13+
14+
.DS_Store

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44

55
欢迎投稿,推荐或自荐文章/软件/资源,请[提交 issue](https://github.com/polaris1119/golangweekly/issues)
66

7+
欢迎关注我们的公众号,第一时间获得周刊:
8+
9+
![](docs/imgs/wechat.png)
10+
711
## 2019
812

9-
**九月**[9](docs/issue-009.md):high_brightness: | [第 8 期](docs/issue-008.md) | [第 7 期](docs/issue-007.md) | [第 6 期](docs/issue-006.md)
13+
**九月**[10](docs/issue-010.md):high_brightness: | [第 9 期](docs/issue-009.md) | [第 8 期](docs/issue-008.md) | [第 7 期](docs/issue-007.md) | [第 6 期](docs/issue-006.md)
1014

1115
**八月**[第 5 期](docs/issue-005.md) | [第 4 期](docs/issue-004.md) | [第 3 期](docs/issue-003.md) | [第 2 期](docs/issue-002.md)
1216

docs/imgs/issue010/AB.png

73.2 KB
Loading

docs/imgs/issue010/closure.png

60.2 KB
Loading

docs/imgs/issue010/cover.jpg

287 KB
Loading

docs/imgs/issue010/go-module.png

62.1 KB
Loading

docs/imgs/issue010/govvv.png

164 KB
Loading

docs/imgs/issue010/reactor.png

30.5 KB
Loading

docs/issue-010.md

Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
# Go语言爱好者周刊:第 10 期
2+
3+
这里记录每周值得分享的 Go 语言相关内容,周日发布。
4+
5+
本周刊开源(GitHub:[polaris1119/golangweekly](https://github.com/polaris1119/golangweekly)),欢迎投稿,推荐或自荐文章/软件/资源等,请[提交 issue](https://github.com/polaris1119/golangweekly/issues)
6+
7+
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
8+
9+
![](imgs/issue010/cover.jpg)
10+
11+
## 刊首语
12+
13+
对技术人员的一些建议(来自前辈的一些经验):
14+
15+
- 多和他人学习经验,搞技术的比较封闭,多出去走走。线上&线下
16+
- 有人的地方就有江湖,建立好规则、良性发展
17+
- 圈子内统一战线、一起合作共赢
18+
- 一个模式成功,不要想着创新。先复制这个方式
19+
- 没事别创业
20+
21+
## 资讯
22+
23+
1、[Go 1.13.1 和 Go 1.12.10 发布,安全更新](https://github.com/golang/go/commits/release-branch.go1.13-security)
24+
25+
Go Team 发布了 Go 1.13.1 和 Go 1.12.10,以解决最近报告的安全问题。我们建议所有受影响的用户更新到以下版本之一(如果不确定哪个版本,请选择 Go 1.13.1)。
26+
27+
net/http (通过 net/textproto)接受无效的 HTTP/1.1 报头并将其标准化,在冒号前会出现空格,产生 RFC 7230 错误。
28+
29+
如果一个 Go 服务器在一个不常见的反向代理后面使用,该代理接受并转发这些无效的报头,却不对这些无效报头进行规范化,反向代理和服务器就会互不相同地解释这些报头。这可能导致过滤旁路或请求漏洞( request smuggling),如果来自不同客户端的请求被代理多路复用到相同的上游连接上,则导致请求漏洞。这些无效的报头现在被 Go 服务器拒绝,并且在没有规范化的情况下传递给 Go 客户端应用程序。
30+
31+
2、[Prometheus 2.13.0-rc.0 发布](https://www.oschina.net/news/110194/prometheus-2-13-rc0-released)
32+
33+
Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。
34+
35+
3、[gmanager v0.1.3 发布,基于 gf 的管理平台](https://www.oschina.net/news/110190/gmanager-0-1-3-released)
36+
37+
gmanager是基于 gf 框架的管理平台,具备登录、认证、组织机构、用户、角色、菜单和日志管理。
38+
39+
4、[Ants 2.0 发布,高性能的 Goroutine 协程池](https://github.com/panjf2000/ants)
40+
41+
`ants`是一个高性能的协程池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制协程数量,复用资源,达到更高效执行任务的效果。
42+
43+
5、[Caddy 2.0 Beta 2 发布](https://github.com/caddyserver/caddy/releases/tag/v2.0.0-beta2)
44+
45+
具有自动 HTTPS 的快速、跨平台 HTTP/2 Web 服务器。
46+
47+
6、[Go team 新 Proposal:通过 inline 实现低损耗的 defer](https://github.com/golang/proposal/blob/master/design/34481-opencoded-defers.md)
48+
49+
defer 的性能问题大家讨论的也不少,Go team 真是对性能的任何优化都不放过。
50+
51+
7、[Go 语言事件驱动架构开发框架 watermill 发布 1.0.0 版本](https://github.com/ThreeDotsLabs/watermill/releases/tag/v1.0.0)
52+
53+
Watermill 是一个 Go 库,用于有效处理消息流。它旨在用于构建事件驱动的应用程序,启用事件源,消息上的 RPC,sagas 以及您想到的其他任何东西。您可以使用传统的 pub/sub 实现,例如 Kafka 或 RabbitMQ,也可以使用 HTTP 或MySQL binlog(如果适合您的用例)。
54+
55+
## 问答
56+
57+
1、[golang 结构体中申明变量的方式不理解](https://segmentfault.com/q/1010000020513803)
58+
59+
`<-` 在类型定义中时是什么意思呢?
60+
61+
2、[优秀 golang 编码规范有哪些?](https://www.zhihu.com/question/347872912/answer/837345346)
62+
63+
比如:定义的接口是分别在多个文件(.go文件) 还是统一在一个文件中;struct 是分布在多个文件 还是 一个文件;同步场景 是优先使用锁机制 还是channel
64+
65+
3、[golang channel 怎么判断是否读取完成?](https://segmentfault.com/q/1010000012553798)
66+
67+
你又遇到需要这样处理的场景吗?
68+
69+
4、[select中default的疑惑](https://studygolang.com/topics/10139)
70+
71+
提问者对 timer、select 之类的理解不够。
72+
73+
5、[Gin框架如何解析json中的时间](https://studygolang.com/topics/9960)
74+
75+
用Gin框架遇到的问题,如果前端用json传了"seven_expiry": "2020-05-08"而后端SevenExpiry的类型是time.Time的话,怎么去获取这个值呢?我试了直接ShouldBindJSON这个方法报错parsing time ""2020-05-08"" as ""2006-01-02T15:04:05Z07:00"": cannot parse """ as "T”
76+
77+
6、[为什么用指针取得的值是一样的呢?](https://studygolang.com/topics/10117)
78+
79+
新手常见问题。
80+
81+
3.同步场景 是优先使用锁机制 还是channel
82+
83+
## 文章
84+
85+
1、[Go对接ElasticSearch如此顺畅:只因做到了这一点](https://mp.weixin.qq.com/s/ze7Ws567SgaFQ7OVDyyWEg)
86+
87+
面对并发问题,是用channel解决,还是用Mutex解决?
88+
89+
2、[Go RESTful 服务挂了怎么能第一时间知晓?分享一个超实用的健康检查方法](https://mp.weixin.qq.com/s/tpWAYN18cSW9lRXGumsEbw)
90+
91+
想象一下,您最近发布并部署了一段很酷的 `RESTful` 微服务,您已经使用了一段时间。您松了一口气却听到 Ops 团队说您的服务不稳定。您真的很确定服务应该没问题,可能是它依赖的服务有问题。那该怎么办?
92+
93+
3、[为什么 Go 模块在下游服务抖动恢复后,CPU 占用无法恢复](https://mp.weixin.qq.com/s/g-qpdwTj4H4cLwVUnYySfQ)
94+
95+
某团圆节日公司服务到达历史峰值 10w+ QPS,而之前没有预料到营销系统又在峰值期间搞事情,雪上加霜,流量增长到 11w+ QPS,本组服务差点被打挂,什么原因呢?
96+
97+
4、[查看 Go 的代码优化过程](https://mp.weixin.qq.com/s/yK62URAIC0V_o_bybdVo6A)
98+
99+
之前有人在某群里询问 Go 的编译器是怎么识别下面的代码始终为 false,并进行优化的:
100+
101+
```go
102+
package main
103+
104+
func main() {
105+
var a = 1
106+
if a != 1 {
107+
println("oh no")
108+
}
109+
}
110+
```
111+
112+
5、[这个代码怎么会编译不通过?Goland 新手常见问题解决:GOPATH 和 Go Modules 编译不成功](https://mp.weixin.qq.com/s/knVXs38-qSzO1GPk1QiKLw)
113+
114+
自从 Go1.11 开始,官方开始支持依赖管理,这就是 Go Modules。如果你对 Go Modules 还不熟悉,请一定要掌握。
115+
116+
6、[Golang并发:再也不愁选channel还是选锁](https://segmentfault.com/a/1190000017890174)
117+
118+
面对并发问题,是用channel解决,还是用Mutex解决?
119+
120+
7、[干货满满的 Go Modules 和 goproxy.cn](https://mp.weixin.qq.com/s/AsdCDodxZFxs2SkhSwOvpg)
121+
122+
由盛傲飞分享,煎鱼整理的完整、全面的 Go module 指南,推荐阅读。B 站的视频:https://www.bilibili.com/video/av69111199
123+
124+
![go-module](imgs/issue010/go-module.png)
125+
126+
8、[一文理清 Go 引用的常见疑惑](https://mp.weixin.qq.com/s/o-iE3ny3-GOIhcWsUbVgVA)
127+
128+
要彻底搞懂引用,得从类型和传递两个角度分别进行思考。
129+
130+
9、[Go 业务基础库之 Error](https://mp.weixin.qq.com/s/PLzA22yfSV_byckTTezl5Q)
131+
132+
在 2019 年 4 月 27 日举办的 Gopher China 2019 中,国内 Go 语言专家,Bilibili 架构师毛剑进行了题为《 Go 业务基础库之 Error & Context 》的演讲。
133+
134+
10、[Prometheus架构与实践分享](https://mp.weixin.qq.com/s/beusaP2f3mOMIlEETBhtjg)
135+
136+
Prometheus已经被广泛应用于数据中心监控,尤其是和Kubernetes结合的容器监控。本文主要从架构分析到落地实践,详细介绍Prometheus原理和使用。对比Prometheus与其他监控工具(Zabbix、Open-Falcon)的特点与使用场景。然后介绍Prometheus与Kubernetes集成,主要从监控和自动伸缩两个方面。最后通过企业案例,分享实践经验和注意事项。
137+
138+
11、[go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包](https://mp.weixin.qq.com/s/ZIIBvCuDgrsdNbQXBeAR9A)
139+
140+
图文并茂的讲解闭包。
141+
142+
![closure](imgs/issue010/closure.png)
143+
144+
## 开源项目
145+
146+
1、[一个分析算法大O时间复杂度的库](https://github.com/Oppodelldog/bigo)
147+
148+
算法必备。
149+
150+
![bigo](imgs/issue010/AB.png)
151+
152+
2、[govvv:"go build" 包装,为 Go 应用加入版本信息](https://github.com/ahmetb/govvv)
153+
154+
包装 go build 命令的简单 Go 二进制版本控制工具。
155+
156+
![govvv](imgs/issue010/govvv.png)
157+
158+
3、[gev: 基于 Reactor 模式的轻量级,快速,无阻塞的 TCP 网络库](https://github.com/Allenxuxu/gev)
159+
160+
`gev` 只使用极少的 goroutine, 一个 goroutine 负责监听客户端连接,其他 goroutine (work 协程)负责处理已连接客户端的读写事件,work 协程数量可以配置,默认与运行主机 CPU 数量相同。
161+
162+
![image](imgs/issue010/reactor.png)
163+
164+
4、[shardmap: 一个简单、高性能的线程安全的分片 hashmap](https://github.com/tidwall/shardmap)
165+
166+
这是标准 Go map 和 sync.Map 的替代方法,并且针对您的 map 需要执行大量并发读写操作进行了优化。
167+
168+
5、[beagle: 在互联网上查找特定用户名的命令行工具](https://github.com/danielkvist/beagle)
169+
170+
Beagle是用 Go 语言编写的 CLI,可在Internet上搜索特定的用户名。
171+
172+
6、[v8go: 在 Go 中执行 JavaScript](https://github.com/rogchap/v8go)
173+
174+
示例:
175+
176+
```go
177+
ctx, _ := v8go.NewContext(nil) // creates a new V8 context with a new Isolate aka VM
178+
ctx.RunScript("const add = (a, b) => a + b", "math.js") // executes a script on the global context
179+
ctx.RunScript("const result = add(3, 4)", "main.js") // any functions previously added to the context can be called
180+
val, _ := ctx.RunScript("result", "value.js") // return a value in JavaScript back to Go
181+
fmt.Printf("addition result: %s", val)
182+
```
183+
184+
7、[stateless: Go 中创建状态机](https://github.com/qmuntal/stateless)
185+
186+
直接在 Go 代码中创建状态机和基于轻量级状态机的工作流。支持与[`C#` 中类似项目](https://github.com/dotnet-state-machine/stateless)几乎相同的API。
187+
188+
8、[xurls: 从文本中提取网址](https://github.com/mvdan/xurls)
189+
190+
使用正则表达式从文本中提取网址。
191+
192+
9、[Gizmo: 纽约时报的微服务工具包](https://github.com/nytimes/gizmo)
193+
194+
微服务工具包。
195+
196+
10、[dt: Go 缺少的 DateTime 包](https://github.com/ribice/dt)
197+
198+
Go 的标准库包含一个日期包- time。它提供的类型 `time` 包含日期,时间和位置信息。
199+
200+
11、[websocket: 一个小巧、Go 习语的 WebSocket 库](https://github.com/nhooyr/websocket)
201+
202+
文档中有几个 websocket 库的对比。
203+
204+
## 资源&&工具
205+
206+
1、[Gin v1.4 中文文档](https://rsy.me/gin-chn-document/)(感觉翻译质量不是太好,建议对比英文阅读)
207+
208+
Gin 是一款用 Go(Golang)编写的Web框架. 它拥有 Martini-like API 的特性,由于使用了 [httprouter](https://github.com/julienschmidt/httprouter),速度提高了40倍。如果你需要表现和良好的生产力,你会爱上 Gin。
209+
210+
2、[Gopher 的艺术作品](https://github.com/ashleymcnamara/gophers)
211+
212+
下载并解压缩 gophers.zip,然后在其中找到 PNG 文件。这些文件已准备好打印,我建议使用 [Sticker Mule](https://www.stickermule.com/) 获得高质量,色彩正确的贴纸。
213+
214+
3、[非官方泛型的尝试](https://github.com/vasilevp/aboriginal)
215+
216+
它们看起来像尖括号,但不是。 是的,这只是一个有趣的小项目。
217+
218+
4、[GopherCon UK 2019 – Conference Report](https://blogs.sap.com/2019/09/24/gophercon-uk-2019-conference-report/)
219+
220+
会议上一些主题的介绍。
221+
222+
5、[goflyway: 加密的 HTTP 服务器](https://github.com/coyove/goflyway)
223+
224+
V2 版本是一个基于HTTP构建的本地端口转发器。
225+
226+
## 订阅
227+
228+
这个周刊每周日发布,同步更新在[Go语言中文网](https://studygolang.com/go/weekly)[微信公众号](https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91)[今日头条](https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709)
229+
230+
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。
231+
232+
![wechat](imgs/wechat.png)

0 commit comments

Comments
 (0)