Skip to content

Commit a420101

Browse files
committed
2019-09-08 第 7 期发布
1 parent 1eec685 commit a420101

File tree

6 files changed

+314
-1
lines changed

6 files changed

+314
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
## 2019
88

9-
**九月**[6](docs/issue-006.md):high_brightness:
9+
**九月**[7](docs/issue-007.md):high_brightness: | [第 6 期](docs/issue-006.md)
1010

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

docs/imgs/issue007/cover.png

1.47 MB
Loading
334 KB
Loading

docs/imgs/issue007/grafana.jpg

242 KB
Loading

docs/imgs/issue007/scheduler.png

89.1 KB
Loading

docs/issue-007.md

Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,313 @@
1+
# Go语言爱好者周刊:第 7 期
2+
3+
这里记录每周值得分享的 Go 语言相关内容,周日发布。
4+
5+
欢迎投稿,推荐或自荐文章/软件/资源等,请[提交 issue](https://github.com/polaris1119/golangweekly/issues)
6+
7+
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
8+
9+
![](/Users/xuxinhua/opensource/golang/golangweekly/docs/imgs/issue007/cover.png)
10+
11+
(题图:来源 Twitter)
12+
13+
## 刊首语
14+
15+
Go1.13 正式发布,圈内发布了相关的文章,本期周刊无疑这方面是重点。
16+
17+
就 Go1.13 版本对普通用户而言,有两点需要着重关注:Module 相关的改动和 errors 包新增的函数。
18+
19+
对于 Go1.13 的 Module,我们可以通过 GOPROXY 来控制代理,以及通过 GOPRIVATE 控制私有库不走代理。
20+
21+
设置 GOPROXY 代理:
22+
23+
> go env -w GOPROXY=https://goproxy.cn,direct
24+
25+
设置 GOPRIVATE 来跳过私有库,比如常用的 Gitlab 或 Gitee 或 Gitea,中间使用逗号分隔:
26+
27+
> go env -w GOPRIVATE=*.gitlab.com,*.gitee.com,*.gitea.com
28+
29+
如果在运行 go mod vendor 时,提示 `Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout`,则是因为 Go 1.13 设置了默认的 GOSUMDB=sum.golang.org,这个网站是被墙了的,用于验证包的有效性,可以通过如下命令关闭:
30+
31+
> go env -w GOSUMDB=off
32+
33+
## 资讯
34+
35+
1、[Go 1.13 正式发布,看看都有哪些值得关注的特性](https://mp.weixin.qq.com/s/7Q2vvFF88NXI3CgEFYY4mg)
36+
37+
核心点主要有:Module 完善、数字字面量、错误包装、默认启用 TLS1.3、逃逸分析优化、defer 性能提升、sync.Pool 优化等。[该 PPT 是另外一种获取新特性的渠道](https://docs.google.com/presentation/d/1RiZmupILuIQQ1Y-psDb1SzXNjCWh-I_-wagthdcwlq8/edit#slide=id.g604d13147b_0_113)(英文)。
38+
39+
2、[Grafana 6.3.5 发布,系统指标监控与分析平台](https://www.oschina.net/news/109546/grafana-6-3-5-released)
40+
41+
Grafana 是一个功能丰富的指标标准仪表板和图形编辑器,用于分析和监控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。
42+
43+
![Grafana](imgs/issue007/grafana.jpg)
44+
45+
3、[NSQ 1.2.0 发布,实时分布式消息传递平台](https://www.oschina.net/news/109523/tnsq-1-2-0-released)
46+
47+
NSQ 是无中心设计、节点自动注册和发现的开源消息系统。可作为内部通讯框架的基础,易于配置和发布。
48+
49+
4、[分布式图数据库 Dgraph 发布 1.1 版本](https://github.com/dgraph-io/dgraph/releases/tag/v1.1.0)
50+
51+
Dgraph 是一个水平可扩展的分布式图形数据库,提供 ACID 事务,一致的复制和线性化读取。它是从头开始构建的,用于执行丰富的查询。作为本机图形数据库,它严格控制数据在磁盘上的排列方式,以优化查询性能和吞吐量,减少群集中的磁盘搜索和网络调用。
52+
53+
5、[CoreDNS 1.6.3 发布,Go 语言实现的 DNS 服务器](https://github.com/coredns/coredns/releases/tag/v1.6.3)
54+
55+
CoreDNS 是一个 DNS 服务器/转发器,用 Go 编写,链式插件。 每个插件都执行(DNS)功能。
56+
57+
6、[protobuf 1.3 发布,从golang/protobuf fork 的版本](https://github.com/gogo/protobuf)
58+
59+
比 golang/protobuf 增加更多代码生成特性:
60+
61+
- 快速 marshalling 和 unmarshalling
62+
- 更规范的 Go 结构
63+
- goprotobuf 兼容性
64+
- 通过可选地生成额外的帮助代码来减少输入
65+
- 通过选择性地生成测试和基准代码增强信心
66+
- 其他序列化格式
67+
68+
7、[REST Layer 0.2 发布,一个 REST 风格 API 框架](https://github.com/rs/rest-layer)
69+
70+
REST Layer 是一个受到优秀 Python Eve 启发的 API 框架。它可以帮助您在可插拔的后端存储上创建一个全面的,可自定义的,安全的 REST(graph)API,没有样板代码,因此您可以专注于您的业务逻辑。
71+
72+
## 问答
73+
74+
1、[golang map类型变量保存的是实际值所在的地址还是什么](https://segmentfault.com/q/1010000020045637)
75+
76+
初始化了一个map型的变量m,使用printf(%p)的格式分别对m和&m进行输出,分别得到两个地址。&m显而易见是m变量的地址,令我困惑的是m也可以输出一个地址,但有人说m保存的并非指针,那为什么m却可以输出地址?map类型的变量访问的机制是什么样的?
77+
78+
2、[Golang中,runtime.Caller(skip),为什么会保留编译器变量?](https://segmentfault.com/q/1010000020145507)
79+
80+
在其他目录下执行非当前目录下的go文件,要求输出go文件的所在绝对路径,我才用的方法是runtime.Caller(0),获取文件位置,但是发现,如果我在A目录下编译的go文件,mv到B目录下之后,go文件依旧输出A的目录。要实现这个需求要怎么做?
81+
82+
3、[疑惑 return 后面的 defer 到底会不会执行?](https://studygolang.com/topics/9967)
83+
84+
新手莫非有此疑惑?
85+
86+
4、[Go 语言中, 空的死循环与永远阻塞的 chan 细节上有什么差异?](https://www.zhihu.com/question/39766078/answer/748425459)
87+
88+
```go
89+
func main() { for {} }
90+
```
91+
92+
93+
94+
```go
95+
func main() { <-make(chan struct{}) }
96+
```
97+
98+
来阻止 main 函数退出。
99+
100+
5、[如何阅读 Golang 的源码?](https://www.zhihu.com/question/327615791/answer/756625130)
101+
102+
学习go语言的过程中,觉得源码写的很棒,但是有点晦涩,该怎么阅读?
103+
104+
6、[golang interface 作用疑惑](https://segmentfault.com/q/1010000020302054)
105+
106+
关于接口有些疑惑。好像用方法可以实现的逻辑,为啥非要用接口呢? 接口反而麻烦,多写几行代码了。
107+
108+
7、[Go 语言 fmt.Scanf 方法的问题](https://segmentfault.com/q/1010000020296537)
109+
110+
```go
111+
func main() {
112+
var a, b, c int
113+
for i := 0; i < 2; i++ {
114+
fmt.Scanf("%d,%d,%d", &a, &b, &c)
115+
fmt.Println(a, b, c)
116+
}
117+
}
118+
```
119+
120+
这段代码,我只输入一次,为什么会有两次输出结果?
121+
输入:1,2,3
122+
输出结果为:
123+
1 2 3
124+
1 2 3
125+
126+
8、[golang 框架 Gin 中间件的 c.Next() 有什么作用?](https://segmentfault.com/q/1010000020256918)
127+
128+
感觉用不用效果一样的啊,看文档说是执行挂起程序,具体怎么好理解一些呢,每个中间件一定要用吗?
129+
130+
## 文章
131+
132+
1、[Go语言(golang)新发布的1.13中的 Error Wrapping 深度分析](https://www.flysnow.org/2019/09/06/go1.13-error-wrapping.html)
133+
134+
Go 1.13发布的功能有一个值得深入研究的,就是对 Error 的增强,也是今天我们要分析的 Error Wrapping。
135+
136+
2、[Go1.13 defer 的性能是如何提高的?](https://mp.weixin.qq.com/s/lwBLVjdZCkwTEZzXhpwKJg)
137+
138+
最近 Go1.13 终于发布了,其中一个值得关注的特性就是 **defer 在大部分的场景下性能提升了30%**,但是官方并没有具体写是怎么提升的,这让大家非常的疑惑。而我因为之前写过[《深入理解 Go defer》](https://studygolang.com/articles/21224)[《Go defer 会有性能损耗,尽量不要用?》](https://studygolang.com/articles/21233) 这类文章,因此我挺感兴趣它是做了什么改变才能得到这样子的结果,所以今天和大家一起探索其中奥妙。
139+
140+
3、[goproxy.cn - 为中国 Go 语言开发者量身打造的模块代理](https://studygolang.com/topics/10014)
141+
142+
[goproxy.cn](https://goproxy.cn/) 还是是一个非营利性项目,目标是为中国和世界上其他地方的 Gopher 们提供一个免费的、可靠的、持续在线的且经过 CDN 加速的模块代理。另附一篇简短的设置 Go proxy 的文章:[Go 1.13设置代理](https://studygolang.com/articles/23326)
143+
144+
4、[有 GC 的编程语言就一劳永逸了吗?GODEBUG来助力 Gopher 调试 GC](https://mp.weixin.qq.com/s/V4Lwlc0KWfGfWZPYL26hZA)
145+
146+
通过本文我们可以掌握使用 GODEBUG 查看应用程序 GC 运行情况的方法,只要用这种方法我们就可以观测不同情况下 GC 的情况了,甚至可以做出非常直观的对比图,大家不妨尝试一下。
147+
148+
5、[GCTT出品 | Go 中的 gRPC 简介](https://mp.weixin.qq.com/s/KRzfUqP_4kd7Uo-xAw29NA)
149+
150+
给使用 Go 语言的初学者的 gRPC 概述
151+
152+
6、[GCTT 出品 | Go 中的缓存现状](https://mp.weixin.qq.com/s/yTUj5iTJ_yH8YeQD1qoVUQ)
153+
154+
这篇文章登上了 Golang 在 Reddit subreddit 板块的顶部,并在 Hacker News 首页排名到第二名。欢迎各位来阅读讨论,并在 Github 上面给我们一个小星星。
155+
156+
7、[Go 语言回顾:从Go 1.0到Go 1.13](https://tonybai.com/2019/09/07/go-retrospective/)
157+
158+
[Go 1.13版本](https://tip.golang.org/doc/go1.13)在2019.9.3[正式发布](https://blog.golang.org/go1.13)!国外的Gopher Vincent Blanchon发表了一篇文章[《Go: Retrospective》](https://medium.com/a-journey-with-go/go-retrospective-b9723352e9b0)(科学上网阅读),对Go从1.0版本到1.13版本做了简要的回顾,这里是那篇文章的译文。
159+
160+
![go-retrospective](imgs/issue007/go-retrospective-1.png)
161+
162+
8、[深度解密Go语言之scheduler](https://qcrao.com/2019/09/02/dive-into-go-scheduler/)
163+
164+
来自码农桃花源的作者:饶全成 深度揭秘系列。探索 Go 语言中的调度器。
165+
166+
![调度器](imgs/issue007/scheduler.png)
167+
168+
9、[一道经常考的面试题](https://studygolang.com/articles/23333)
169+
170+
关于循环创建 goroutine 输出的问题。
171+
172+
10、[Go 笔记之如何测试你的 Go 代码](https://juejin.im/post/5d6d462ef265da03e5234f57)
173+
174+
不论是开源项目,还是日常程序的开发,测试都是必不可少的一个环节。今天我们开始进入 Go 测试模块 testing 的介绍。
175+
176+
## 开源项目
177+
178+
1、[bild:纯 Go 实现的并行图像处理算法集合](https://github.com/anthonynsimon/bild)
179+
180+
一个图像处理的命令行工具,Go 语言编写。可以通过命令行参数,调节亮度、饱和度、模糊、锐化等。活脱脱一个命令行的傻瓜 PS 工具。
181+
182+
```bash
183+
bild
184+
185+
A collection of parallel image processing algorithms in pure Go
186+
187+
Usage:
188+
bild [command]
189+
190+
Available Commands:
191+
adjust adjust basic image features like brightness or contrast
192+
blend blend two images together
193+
blur blur an image using the specified method
194+
channel channel operations on images
195+
effect apply effects on images
196+
help Help about any command
197+
histogram histogram operations on images
198+
imgio i/o operations on images
199+
noise noise generators
200+
segment segment an image using the specified method
201+
202+
Flags:
203+
-h, --help help for bild
204+
--version version for bild
205+
206+
Use "bild [command] --help" for more information about a command.
207+
```
208+
209+
2、[lefthook:快速而强大的 Git 钩子管理器,适用于任何类型的项目](https://github.com/Arkweid/lefthook)
210+
211+
Git 钩子管理器,可以用在各种项目之中。特点是功能强大,允许并行执行多个任务。
212+
213+
3、[cache2go:具有过期功能和访问计数器的并发安全 Go 缓存库](https://github.com/muesli/cache2go)
214+
215+
可以当作本地缓存库使用。
216+
217+
4、[Litter:一个用于调试的辅助工具,可以漂亮的打印出 Go 数据结构](https://github.com/sanity-io/litter)
218+
219+
比如下面的代码:
220+
221+
```go
222+
type Person struct {
223+
Name string
224+
Age int
225+
Parent *Person
226+
}
227+
228+
litter.Dump(Person{
229+
Name: "Bob",
230+
Age: 20,
231+
Parent: &Person{
232+
Name: "Jane",
233+
Age: 50,
234+
},
235+
})
236+
```
237+
238+
输出是:
239+
240+
```
241+
Person{
242+
Name: "Bob",
243+
Age: 20,
244+
Parent: &Person{
245+
Name: "Jane",
246+
Age: 50,
247+
},
248+
}
249+
```
250+
251+
是不是比通常的输出好看多了呢?
252+
253+
5、[xxhash:64位 XxHash 算法的实现,XXH64](https://github.com/cespare/xxhash)
254+
255+
一种高质量的哈希算法,比 Go 标准库中的任何算法都要快得多。
256+
257+
6、[dbx:一个支持 KV 缓存全表数据的高性能 golang db 库](https://github.com/mydeeplike/dbx)
258+
259+
一个支持对全表数据进行透明缓存的 Golang DB 库,在内存足够大的情况下,不再需要 Memcached, Redis 等缓存服务。 而且读取缓存的速度相当之快,本机测试 qps 达到: 350万+/秒,可以有效的简化应用端业务逻辑代码。 它支持 MySQL/Sqlite3,支持结构体自由组合嵌套。 它的实现原理为自动扫描表结构,确定主键和自增列,并且通过主键按照行来缓存数据,按照行透明管理 cache,上层只需要按照普通的 ORM 风格 API 操作即可。
260+
261+
7、[joe:一个通用的机器人库,受 Hubot 的启发,但是用 Go 编写](https://github.com/go-joe/joe)
262+
263+
Joe是一个用于在 Go 编程语言中编写聊天机器人的库。它 Hubot 框架的启发,并为想要使用 Go 实现聊天机器人的人们带来了它的便利。
264+
265+
8、[elton:高性能、简单的、类 koa 的Web 框架](https://github.com/vicanso/elton)
266+
267+
开始接触后端开发是从 nodejs 开始,最开始使用的框架是 express,后来陆续接触了其它的框架,觉得最熟悉的还是koa。使用 golang 做后端开发时,对比使用过 gin,echo 以及 iris 三个框架,它们的用法都类似(都支持中间件,中间件的处理也类似),但是在开发过程中还是钟情于 koa 的处理方式,失败则 throw error,成功则将响应数据赋值至 ctx.body,简单易懂。于是造了这个轮子。
268+
269+
9、[bokchoy:基于 Redis 的 Go 简单队列](https://github.com/thoas/bokchoy)
270+
271+
Bokchoy是一个简单的 Go 库,用于排队任务并在后台与工作人员一起处理它们。它应该很容易集成到您的 Web 堆栈中,并且它的设计目标是为新手提供较低的屏障。
272+
273+
## 资源&&工具
274+
275+
1、[TeaWeb:可视化的 Web 代理服务](https://github.com/TeaWeb/build)
276+
277+
集静态资源、缓存、代理、统计、日志、安全、监控于一体的可视化智能 WebServer。使用Go语言实现,在高可定制化前提下,保证高性能、高并发。
278+
279+
2、[curlie:用于 HTTP 请求的 CLI 工具](https://github.com/rs/curlie)
280+
281+
如果您喜欢 HTTPie 的界面但却错过了 curl 的功能,那么 curlie 就是您想要的工具。 Curlie 是 curl 的前端,增加了httpie的易用性,而不会影响功能和性能。
282+
283+
![](https://raw.githubusercontent.com/rs/curlie/master/doc/get.png)3、[bed:用 Go 编写的二进制/十六进制编辑器](https://github.com/itchyny/bed)
284+
285+
![](https://user-images.githubusercontent.com/375258/38499347-2f71306c-3c42-11e8-926e-1782b0bc73f3.png)
286+
287+
4、[阿里云大学开发者课堂](https://edu.aliyun.com/developer)
288+
289+
数据时代的IT技能学习平台,云计算、大数据、人工智能等前沿及基础技术课程学、练、测、在线实验一站式体验。包含各种视频教程。大部分都是免费的。
290+
291+
5、[帮助你下次技术面试的资料汇总](https://github.com/yangshun/tech-interview-handbook)
292+
293+
精心策划的内容可帮助您完成下一次技术面试,重点关注算法。
294+
295+
6、[轻进存销管理系统](https://github.com/Allenxuxu/mogutouERP)
296+
297+
mogutouERP 是一个前后端分离的微型进存销系统,采用 Gin + Vue 开发。如果你觉得没有项目练手,可以看看别人怎么开发一个项目的。
298+
299+
7、[Gin Weibo App](https://github.com/Away0x/gin_weibo)
300+
301+
练习项目,使用 Gin 框架实现简单的微博功能。
302+
303+
8、[YourNovel-基于Golang的开源小说搜索引擎&免费小说阅读网站](https://github.com/DemonFengYuXiang/YourNovel)
304+
305+
这里小说不是我要推荐的关键,还是这个项目本身,学习使用 Go 语言搭建一个网站,爬取相关的数据的技术。
306+
307+
## 订阅
308+
309+
这个周刊每周日发布,同步更新在[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)
310+
311+
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。
312+
313+
![wechat](imgs/wechat.jpg)

0 commit comments

Comments
 (0)