快捷搜索:  汽车  科技

go语言入门第四天(Go语言爱好者周刊)

go语言入门第四天(Go语言爱好者周刊)Go 1.13 毕竟没有带来泛型,所以,大部分人对它的期待其实没有多少。当然,也有人很期待,主要在 Module 方面的改进和完善。目前 1.13 的 issue 列表:https://github.com/golang/go/milestone/83题图:GopcherCon 2019 合成刊首语 Go 1.13 在 8 月份还是没有发布,Delay 了。坚持了 10 年的按时发布,这次没有按时,大家觉得跟 Brad 的老婆生二胎休假有很大关系,少了核心开发者。Go 1.13 在 Module 上花的精力也很大。

这里记录每周值得分享的 Go 语言相关内容,周日发布。

欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[1]

由于头条不允许外链,文中大量链接,可以通过文末「了解更多」查看。

鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。

go语言入门第四天(Go语言爱好者周刊)(1)

题图:GopcherCon 2019 合成

刊首语

Go 1.13 在 8 月份还是没有发布,Delay 了。坚持了 10 年的按时发布,这次没有按时,大家觉得跟 Brad 的老婆生二胎休假有很大关系,少了核心开发者。Go 1.13 在 Module 上花的精力也很大。

目前 1.13 的 issue 列表:https://github.com/golang/go/milestone/83

go语言入门第四天(Go语言爱好者周刊)(2)

Go 1.13 毕竟没有带来泛型,所以,大部分人对它的期待其实没有多少。当然,也有人很期待,主要在 Module 方面的改进和完善。

说实话,坚持了这么多年按时发布,这个时候不能按时发布,内心还是有一点遗憾,当然无伤大雅!

资讯

1、Go 语言调试器 Delve 发布 1.3.0[2]

Go 语言实现的 Go 语言调试器,发布 1.3.0,支持 Go 1.13。

2、GoLand 2019.2.1 发布,JetBrains 打造的 Go 语言 IDE[3]

这是对 GoLand 2019.2 的 bug-fix 更新版本。更新内容包括对 UI 的修复、对自动补全代码功能的改进、对导入功能的优化、改进 sql 注入功能以及改进代码格式化工具等。

另外,GoLand 公布了 2019.3 Roadmap[4],有望引入远程开发功能。

3、GKTemplate v0.0.4,采用 Go 开发的 DedeCMS 模板解析器[5]

GKTemplate 是一个 Go 语言开发的模板引擎,由于 Go 语言内置的模板引擎自由度过高,导致开发使用相对比较困难,对界面模板制作要求会比较高,GKTemplate 是一款基于标签、属性机制的模板引擎,在牺牲部分自由度、性能的前提下,优化模板语义机制,使得开发、制作模板变得更为轻松简单。

4、go-fastdfs v1.3.2 发布,修正跨域 options 方法[6]

go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。

项目 GitHub 地址:https://github.com/sjqzhang/go-fastdfs

5、Consul 1.6 GA 发布[7]

Consul 是 HashiCorp 公司推出的开源工具,也是主流的用于实现分布式系统服务发现与配置的方案。HashiCorp 对 Consul 的介绍是一个多云服务网络平台,用于在跨任何运行时平台和公共云或私有云的场景连接和保护服务。

本次更新主要集中在 Consul Connect(为其增加了一些主要新特性)和 Consul 的服务网格解决方案方面,此外还有一些改进和错误修复。

6、Go 语言开发工具 LiteIDE X36.1 发布[8]

在目录管理窗口中加入了文件复制/粘贴功能,修复了以 _ 开始符号查找错误,更新了 gotools & gocode。

7、Gorilla WebSocket: Go 语言的 WebSocket 实现,发布 1.4.1 版本[9]

这次版本主要修复 DoS 的问题,建议升级。

问答

1、如何阅读Golang的源码?[10]

学习go语言的过程中,觉得源码写的很棒,但是有点晦涩,该怎么阅读?本文给出建议。

2、在循环中 append map 到 map slice,map slice 中的数据全部为最后一次 append 的数据[11]

map 是引用类型,即使 slice 通过 append 赋值了多份 map 变量,但是其内部指向是同一个地址。

3、golang 等值比较是不是直接比较地址呢?[12]

首先要说 Go 的等值比较的是值,而不是地址。Go 中变量的可比较类型是内置的,所有基本类型都可以进行比较,另外 interface 和 struct 也可以比较。两个变量可比较的提前必须是相同类型。但有一点需要说明的是,interface 是不确定的类型,所有它不但会比较值,还会比较具体的类型。

4、golang 中如何禁止一个导出类型直接构造,必须通过new函数来构造?[13]

其他的 oo 语言实现题主要求是非常简单的,只要定义相应的私有成员属性并通过构造函数控制输入的参数即可。

那么 Go 该如何实现呢?其实也很简单,思路与 oo 是类似的。只是我们把 oo 语言中的构造函数换成了 Go 中的工厂方法,私有变量变成了 Go 包级别的私有成员属性。我们只需要通过定义指定的可导出的工厂方法创建实例即可。

5、Golang中 fmt.Println 和直接 println 有什么区别?[14]

println 主要是 Go 自己使用,比如源码、标准库等,而 fmt 才是给 Go 开发人员使用的。而且要提的是 println 不能保证兼容性,可能在未来的某一天就不存在了,但 fmt 中的函数就不存在着这样的问题。

当然,两者的使用和效果上也是有区别的,如 println 输出是到标准错误的,而非标准输出。

此外,Go 语言中文网微信群有人提出了一个诡异的问题,我为知识星球用户做了详细的分析解答:由群里讨论的关于 println 和 fmt.Println “诡异”问题的思考总结[15]

文章

1、使用 Go Modules(模块)进行依赖项迁移[16]

本篇文章是 Go Modules 系列官方博客文章的第 2 部分。第 1 部分请参阅:Go Modules 的使用方法(中文翻译版)[17]

2、GCTT 出品 | Go 的调度器追踪

我喜欢 Go 语言的一个原因就是因为它可以生成分析和调试信息。当程序在执行的时候 Go 有一个特殊的环境变量 GODEBUG,它在运行阶段可以生成调试信息。你可以获取程序回收器和调度器的概要信息以及详细的信息。更主要的是你不需要添加任何的额外工作重新编译就可以完成调试

在这篇文章里,我将通过一个简单的 Go 程序演示如果使用调度跟踪信息。如果你对调度器有一定的了解那么它对你是用的。

3、使用 GitHub Actions 自动化构建 Golang 应用[18]

GitHub Actions 是前段时间推出的自家的自动化构建工具。允许构建一个完整的 CI/CD Pipeline,与 GitHub 生态系统深度集成。目前还未开放,开通过 https://github.com/features/actions/signup 申请。本文介绍用该功能构建 Go 应用。

对 GitHub Actions 感兴趣的进一步看看此文:使用Github Actions教程[19]。这里还有一篇英文文章:使用 GitHub Actions 对Go项目持续集成[20]

4、如何在 Golang API 中避免内存泄漏?[21]

建议你在将 Golang API 投入生成之前阅读此文,此文是基于真实的线上问题修复经历,如有巧合,纯属踩雷!

go语言入门第四天(Go语言爱好者周刊)(3)

5、go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?[22]

讲故事的方式讲解面向接口编程。

6、Hi 使用多年的 go pprof 检查内存泄漏的方法居然是错的?![23]

本文介绍一下 Go pprof 工具查找内存泄漏的一个不太常用的方法。

go语言入门第四天(Go语言爱好者周刊)(4)

7、明白了,原来 Go web 框架中的中间件都是这样实现的[24]

这篇文章想谈谈 Go 的装饰器模式、pipeline(filter)模式以及常见 web 框架中的中间件的实现方式。

8、Golang实现单机百万长连接服务 - 美图的三年优化经验

美图长连接服务历时三年,在内存优化上积累比较丰富的实践经验,本文将会介绍我们团队这些年在内存优化道路上做的一些尝试。

9、Go 语言测试驱动开发[25]

Go 语言对测试的原生支持以及完善的测试类库框架使得 TDD 的实施成本相对较低,这相当于放大了 TDD 的收益。在此向广大 gopher 们安利一波,说不定你也会爱上它。本篇将从实际业务视角触发,通过一个示例来演示如何运用TDD来构建我们的Go程序。

go语言入门第四天(Go语言爱好者周刊)(5)

10、Go 组件学习——database/sql 数据库连接池你用对了吗[26]

通过实际 case 讲解连接池的一些概念和使用。

11、Go 内存泄漏?不是那么简单![27]

最近遇到一个Go内存不释放的问题,记录一下测试和调研的情况。我到不把它归为Go内存泄漏的问题,因为它和一般的内存泄漏的方式不同。

12、golang goroutine 和 线程[28]

本文由进程、线程进而引出 goroutine。这些操作系统相关的概念,我们都是需要掌握的。

13、Go进阶:如何开发多彩动感的终端 UI 应用[29]

终端(Terminal)是计算机系统的输入输出设备,由于历史的原因终端这个概念非常混乱,终端的发展经历了字符终端图形终端网络终端 三个阶段。如果你酷炫的终端 UI 有要求,此文很适合你。

14、Go语言学习——如何实现一个过滤器[30]

基于 Go 语言造轮子实现一个过滤器的雏形,通过实现一个相对优雅可扩展的过滤器熟悉了 type 的用法,Context.WithValue 的作用。

15、通过布局属性来减少结构体尺寸(英文)[31]

关于在定义结构时内存如何工作的快速但有用的提示。

go语言入门第四天(Go语言爱好者周刊)(6)

开源项目

1、Lute: 一款结构化的 Markdown 引擎,为未来而构建[32]

完整实现了最新的 GFM[33]/CommonMark[34] 规范,对中文语境支持更好。Go 语言中文网计划将网站改为使用它。

2、script: 在 Go 中轻松编写类似 shell 的脚本[35]

如果不喜欢 shell 脚本,不妨试试这个。

3、migrator: 数据库迁移工具[36]

特色:

  • 轻量级实现,支持 database/sql。Migrator 不需要任何 ORM 或其他重型库作为依赖项。它只是由少于 200 行代码的单个文件组成;
  • 轻松嵌入您的应用程序,无需安装/使用单独的二进制文件;
  • 支持 Go 迁移,无论是事务还是非事务;
  • 使用灵活;

4、ale: Go 实现的 Lisp 环境[37]

爱好 Go 的有会 Lisp 的吗?

5、go-prompt: 在 Go 中构建强大的交互式提示,受 python-prompt-toolkit 的启发[38]

一个用于构建强大的交互式提示的库,受到 python-prompt-toolkit 的启发,可以更轻松地使用 Go 构建跨平台的命令行工具。

6、chroma: 纯 Go 语言实现的通用语法高亮库[39]

Chroma 采用源代码和其他结构化文本,并将其转换为语法高亮 HTML,ANSI 色文本等。Chroma主要基于 Pygments,包括 Pygments 词法分析器和样式的翻译器。可见,chroma 不仅可以用于 HTML 页面语法的高亮,还支持终端的高亮。支持的语言还是很全的。

7、godocc: 带有颜色的 godoc 工具[40]

接受 doc 使用的所有参数和标志。Godocc 只是 go doc 工具的简单包装器。界面很美观!

go语言入门第四天(Go语言爱好者周刊)(7)

8、imaging: 基本图像处理功能库[41]

有图像?想要在 Go 中调整大小、旋转或裁剪它们吗?试试这个库。

原图:

go语言入门第四天(Go语言爱好者周刊)(8)

各种处理结果:

go语言入门第四天(Go语言爱好者周刊)(9)

更多其他效果,看看该库的首页。

9、busgo/forest: 分布式任务调度平台[42]

by @busgo 推荐。#issue2[43]

资源&&工具

1、GopherCon 2019 大会演讲视频全集[44]

视频在 youtube 上。lightning talk视频在这里:https://www.youtube.com/playlist?list=PL2ntRZ1ySWBedT1MDWF4xAD39vAad0DBT 。有人搬到国内 B 站了,可以在 B 站观看 https://www.bilibili.com/video/av65679861。这里还有英文文字版:https://about.sourcegraph.com/go/

go语言入门第四天(Go语言爱好者周刊)(10)

2、Go 微服务框架 go-micro 系列教程[45]

微服务很火,微服务的本质是让专业的人做专业的事情,做出更好的东西。这个系列讲解 go-micro 构建微服务。目前更新到 2.3 章节。

  • golang微服务框架go-micro 入门笔记1.搭建 go-micro环境[46]
  • golang微服务框架go-micro 入门笔记2.1 micro工具之micro api[47]
  • golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web[48]
  • golang微服务框架go-micro 入门笔记2.3 micro工具之消息订阅和发布[49]

3、gostringsr2: Python 实现的用于 Go 的逆向工程[50]

极客可以了解下。这里有一篇介绍的英文文章:https://carvesystems.com/news/reverse-engineering-go-binaries-using-radare-2-and-python/ 。

4、yeetgif: Go 语言实现的 GIF 效果的 CLI[51]

可组合 GIF 效果的 CLI,具有合理的默认值。专为 Slack/Discord 定制 emoji 表情。很有趣的一个工具。

5、Go 面试每天一篇(第 9 天)

连续坚持是一件很难的事情,期待作者能坚持更新,作者的公众号也可以关注一波。面试题是大家永恒关注的话题,因此,Go 语言中文网开启了一个项目,专门用来收集、解答各种 Go 语言相关的笔试、面试题,欢迎你提 issue。项目地址:Go-Interview-QA[52]

6、go-web-app: 用于设置 Go WebAssembly 前端应用程序的 CLI[53]

订阅

这个周刊每周日发布,同步更新在Go语言中文网[54]微信公众号[55]今日头条[56]

微信搜索"Go语言中文网"或者扫描二维码,即可订阅。

go语言入门第四天(Go语言爱好者周刊)(11)

参考资料

[1]

提交 issue: https://github.com/polaris1119/golangweekly/issues

[2]

Go 语言调试器 Delve 发布 1.3.0: https://studygolang.com/topics/9989

[3]

GoLand 2019.2.1 发布,JetBrains 打造的 Go 语言 IDE: https://www.oschina.net/news/109407/goland-2019-2-1-released

[4]

2019.3 Roadmap: https://www.oschina.net/news/109439/goland-2019-3-roadmap

[5]

GKTemplate v0.0.4,采用 Go 开发的 DedeCMS 模板解析器: https://www.oschina.net/news/109395/gktemplate-0-0-4-released

[6]

go-fastdfs v1.3.2 发布,修正跨域 options 方法: https://www.oschina.net/news/109466/go-fastdfs-1-3-2-released

[7]

Consul 1.6 GA 发布: https://www.oschina.net/news/109463/consul-1-6-general-availability

[8]

Go 语言开发工具 LiteIDE X36.1 发布: https://www.oschina.net/news/109448/liteide-x36-1-released

[9]

Gorilla WebSocket: Go 语言的 WebSocket 实现,发布 1.4.1 版本: https://github.com/gorilla/websocket/releases/tag/v1.4.1

[10]

如何阅读Golang的源码?: https://studygolang.com/articles/23154

[11]

在循环中 append map 到 map slice,map slice 中的数据全部为最后一次 append 的数据: https://segmentfault.com/q/1010000019881129/a-1020000019949131

[12]

golang 等值比较是不是直接比较地址呢?: https://segmentfault.com/q/1010000019940462/a-1020000019941598

[13]

golang 中如何禁止一个导出类型直接构造,必须通过new函数来构造?: https://www.zhihu.com/question/333771024/answer/741498087

[14]

Golang中 fmt.Println 和直接 println 有什么区别?: https://www.zhihu.com/question/335186436/answer/750846252

[15]

由群里讨论的关于 println 和 fmt.Println “诡异”问题的思考总结: https://studygolang.com/topics/9992

[16]

使用 Go Modules(模块)进行依赖项迁移: https://studygolang.com/articles/23133

[17]

Go Modules 的使用方法(中文翻译版): https://studygolang.com/articles/19334

[18]

使用 GitHub Actions 自动化构建 Golang 应用: https://www.qikqiak.com/post/use-github-actions-build-go-app/

[19]

使用Github Actions教程: https://tech.mojotv.cn/go/golang-github-actions

[20]

使用 GitHub Actions 对Go项目持续集成: https://onepage.nopub.io/p/Using-GitHub-Actions-with-Go-2ca9744b531f4f21bdae9976d1ccbb58

[21]

如何在 Golang API 中避免内存泄漏?: https://studygolang.com/articles/23172

[22]

go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?: https://studygolang.com/articles/23169

[23]

Hi 使用多年的 go pprof 检查内存泄漏的方法居然是错的?!: https://colobu.com/2019/08/20/use-pprof-to-compare-go-memory-usage/

[24]

明白了,原来 Go web 框架中的中间件都是这样实现的: https://colobu.com/2019/08/21/decorator-pattern-pipeline-pattern-and-go-web-middlewares/

[25]

Go 语言测试驱动开发: https://juejin.im/post/5d653d90f265da039d32dda9

[26]

Go 组件学习——database/sql 数据库连接池你用对了吗: https://juejin.im/post/5d624abde51d45621655352c

[27]

Go 内存泄漏?不是那么简单!: https://colobu.com/2019/08/28/go-memory-leak-i-dont-think-so/

[28]

golang goroutine 和 线程: https://www.jianshu.com/p/588c6dceb5cf

[29]

Go进阶:如何开发多彩动感的终端 UI 应用: https://tech.mojotv.cn/tutorial/golang-term-tty-pty-vt100

[30]

Go语言学习——如何实现一个过滤器: https://www.cnblogs.com/bigdataZJ/p/go-filter.html

[31]

通过布局属性来减少结构体尺寸(英文): https://preslav.me/2019/08/27/reduce-struct-size-by-laying-out-attributes-accordingly/

[32]

Lute: 一款结构化的 Markdown 引擎,为未来而构建: https://github.com/b3log/lute

[33]

GFM: https://github.github.com/gfm/

[34]

CommonMark: https://commonmark.org/

[35]

script: 在 Go 中轻松编写类似 shell 的脚本: https://github.com/bitfield/script

[36]

migrator: 数据库迁移工具: https://github.com/lopezator/migrator

[37]

ale: Go 实现的 Lisp 环境: https://github.com/kode4food/ale

[38]

go-prompt: 在 Go 中构建强大的交互式提示,受 python-prompt-toolkit 的启发: https://github.com/c-bata/go-prompt

[39]

chroma: 纯 Go 语言实现的通用语法高亮库: https://github.com/alecthomas/chroma

[40]

godocc: 带有颜色的 godoc 工具: https://github.com/inancgumus/godocc

[41]

imaging: 基本图像处理功能库: https://github.com/disintegration/imaging

[42]

busgo/forest: 分布式任务调度平台: https://studygolang.com/p/busgo

[43]

#issue2: https://github.com/polaris1119/golangweekly/issues/2

[44]

GopherCon 2019 大会演讲视频全集: https://www.youtube.com/playlist?list=PL2ntRZ1ySWBdDyspRTNBIKES1Y-P__59_

[45]

Go 微服务框架 go-micro 系列教程: https://www.jianshu.com/p/41005492033f

[46]

golang微服务框架go-micro 入门笔记1.搭建 go-micro环境: https://www.jianshu.com/p/41005492033f

[47]

golang微服务框架go-micro 入门笔记2.1 micro工具之micro api: https://www.jianshu.com/p/5c9e876ac467

[48]

golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web: https://www.jianshu.com/p/7821d240b109

[49]

golang微服务框架go-micro 入门笔记2.3 micro工具之消息订阅和发布: https://www.jianshu.com/p/cd2e80de45e7

[50]

gostringsr2: Python 实现的用于 Go 的逆向工程: https://github.com/CarveSystems/gostringsr2

[51]

yeetgif: Go 语言实现的 GIF 效果的 CLI: https://github.com/sgreben/yeetgif

[52]

Go-Interview-QA: https://github.com/studygolang/Go-Interview-QA

[53]

go-web-app: 用于设置 Go WebAssembly 前端应用程序的 CLI: https://github.com/talentlessguy/go-web-app

[54]

Go语言中文网: https://studygolang.com/go/weekly

[55]

https://weixin.sogou.com/weixin?query=Go语言中文网

[56]

今日头条: https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709

猜您喜欢: